When I saw the latest in the Lord of the Rings trilogy of movies a short while ago, I wondered how Tolkien had invented the artificial languages of Middle Earth. In my previous article, I told of my desire to discover which real language had been the biggest influence on Tolkien for his invented ones. As a software developer, I wanted to discover this information algorithmically. My idea was to use my own string similarity algorithm to compare each word from a list of Tolkien words to words from 14 other real languages. For each Tolkien word, I would find and record the language with the word that is (lexically) most similar. The set of most-similar words and the languages from which they came would provide new insights into the influences on Tolkien.
The Part 1 article described how I obtained word lists for 14 real languages, as well as a list of Tolkien words, cleaned them all up in preparation for processing, and represented them in a MySQL relational database. At the end of the article, I had over 1.3 million words in the database, a Java implementation of my similarity metric (from the 'How to Strike a Match' article), and JDBC database access drivers at my disposal that would provide access to the word lists from a Java program. I also used some SQL queries to analyze the sizes of the word lists, as these will be important for any conclusions made.
Preparing to Store Similarity Results
Now that the word lists were ready, my attention turned to the algorithm that would be applied to the word lists and the results that would be generated. The question in my mind was 'What should I do with a result once I have discovered it?' That is, as soon as I know the most similar word to a Tolkien word, do I print it out to the screen, only for that information to become lost when the screen buffer size is exceeded? Do I write it out to a file, so that the result is persisted for later analysis? Or do I write the results back to the database, so that they are immediately available for analysis through SQL queries?