Highly developed constructed languages always inevitably share similarities with real languages because of the structures required to explore the complex thoughts of humans. The aim of this project is first to explore what similarities the constructed language of Quenya shares with real language families, and second to find what language family, out of the Uralic, Celtic, and Germanic families, may have inspired the creator, J.R.R. Tolkien, most heavily. In this project I compare seven features of natural languages with Quenya, covering syntax, morphology, and phonetics. In the end, although the Celtic family proved to be the most similar to Quenya, the majority of the comparisons proved Quenya to be mostly dissimilar from the language families I chose to compare.
Introduction
Constructed languages, also known as conlangs, are a phenomenon originating from human curiosity towards the structure and use of language. Some of the more famous conlangs include Esperanto, inspired heavily by romance languages and created as an aid for international relations, and Ithkuil, an experimental language aiming to the maximize complex thoughts conveyed in as few linguistic units as possible. Conlangs have also often been used to aid in world-building; examples include the language of Klingon in Star-trek, Naʼvi from the film Avatar, and many others. Quenya is one such language, a conlang constructed by high fantasy author J . R . R . Tolkien for his famous book series The Lord of the Rings. It uses highly complex and irregular grammar, inspired by the development of natural languages, to bring life to his fantasy societies and people. I chose to analyze Quenya, as opposed to another conlang, because of the wide fanbase dedicated to its documentation. By comparing the phonetics, morphology, and sentence structure of Quenya to languages in the Germanic, Uralic, and Celtic language families, we show how different language families influenced the development of Tolkien' s most complex conlang.
Importing Quenya data
Importing Quenya data
Dataset of Quenya language features, based on research
Dataset of Quenya language features, based on research
In order to compare Quenya with Celtic, Uralic, and Germanic, my first step was to create a small dataset with five categories, already filled with information on Quenya syntax and phonetics I found by researching the history and structure of the language. All the phrase and dictionary data was taken from Eldamo, a website dedicated to the thorough documentation of Tolkien’s constructed language family. This data will eventually be compared to the equivalent data from other languages to help quantify similarities.
Establishing a dataset of the researched data surrounding the syntax of Quenya
In[]:=
quenyanData=Dataset[<|{"Name"->"Quenya"},{"Family"->"Elvish"},{"7A""2 Glottalized consonants"},{"116A"->"1 Question particle"},{"39A""5 Inclusive and exclusive differentiated"},{"81A"->"2 SVO"},{"27A"->"1 Productive full and partial reduplication"}|>]
Out[]=
Quenya-English Phrases
Quenya-English Phrases
The next step in analyzing the structure of Quenya is finding example texts. For this project, I gathered over 350 sentences written in Quenya by Tolkien. Although there are enormous repositories of Quenya text online, most of those repositories include fan-translated works. Although these texts may accurately represent the rules of Quenya, I decided to stay as close as possible to Tolkien’s original vision for his language.
I first imported the data from the Eldamo website and isolated the wanted phrases from the extraneous text found on the webpage using Drop:
In[]:=
phrases=StringSplit[Import["https://eldamo.org/content/phrase-indexes/phrases-q.html"]];usableText=StringRiffle[Drop[phrases,44]];
Next, I separated out the English translations by selecting the data within quotations, then I isolated the Quenya phrases by selecting around the quotes text. When this was done, I made an association between every Quenya phrase and its corresponding English translation.
In[]:=
elfphras=StringSplit[StringReplace[ Shortest["“"~~__~~"”"]->"----"][usableText],"----"];engphras=StringCases[usableText, Shortest["“"~~x__~~"”"]->x];asos=AssociationThread[elfphras->engphras];
Building a Dictionary
Building a Dictionary
Importing information from Eldamo
Importing information from Eldamo
The next dataset I wanted to gather was a dictionary. Although translations were provided for the phrases I imported, many words were used sparsely, which meant that computationally finding their definitions would be extremely unreliable. To avoid this danger, I imported a dataset of around 2,600 words, accompanied by their part(s) of speech and translations. After all, the goal of gathering the data is to have access to each Quenyan word’s stem, part of speech, and definition.
Import the data, drop the non-dictionary text
In[]:=
importdict=StringSplit[Import["https://eldamo.org/content/word-indexes/words-q.html"]];dictionary=StringRiffle[Drop[importdict,9]];
Separate the definitions (defs) from the rest of the data (elf)
In[]:=
defs=StringCases[dictionary,Shortest["“"~~y__~~"”"]->y];elf=StringSplit[StringReplace[ Shortest["“"~~__~~"”"]->"---"][dictionary],"---"];
Data Cleaning
Data Cleaning
The next step required to make this data usable was to clean it. The main objects requiring removal from the “elf” data were special characters and unrelated links . The creator of the dictionary helpfully linked related words at the end of each dictionary entry, which was unneeded for this specific use of the data. The creator also used special characters to convey unknown meaning about many dictionary entries, which were similarly unusable to me because of a lack of legend.
Replace the special characters
In[]:=
specialcharact=StringReplace[#,"²"->"","# "->"","¹"->"","³"->"","⁴"->"","† "->"","*"->"","!"->"","?"->"","‽"->"","[ þ ]"->"","[ ñ- ]"->""]&/@elf;
In[]:=
wanted=StringReplace[#,Shortest["see "~~y__~~" "]->""]&/@specialcharact;
The next step of making the data usable was removing the parts of speech from the list. To do this, I ensured that they were the last item in every dictionary sublist by removing spaces from between any double parts of speech (dbpos).
In[]:=
dbpos={" adj. and n. "->" adj.andn."," adj.and pron. "->" adj.andpron."," adj. and adv. "->" adj.andadv."," n. and adj. "->" n.andadj."," n. and adv. "->" n.andadv."," n. and pron. "->" n.andpron."," adv. and conj. "->" adv.andconj."," adj. and pron. "->" adj.andpron."," adv. and n. "->" adv.andn."," adv. and adj. "->" adv.andadj."," prep. and adv. "->" prep.andadv."," prep. and conj. "->" prep.andconj."," conj. and adv. "->" conj.andadv."," ordinal. and adj. "->" ordinal.andadj."," interj. and adv. "->" interj.andadv."," pron. and conj. "->" pron.andconj."," conj. and adv. "->" conj.andadv."};joinpos=StringReplace[#,dbpos]&/@wanted;
Isolating Quenya words and their parts of Speech
Isolating Quenya words and their parts of Speech
The final step in cleaning out this data was taking the parts of speech (pos) out of the “elf” list. Since each part of speech had become the final element in each sublist, all that was needed to remove them was to take the element at index -1 from each sublist of the larger list. With this done, I replaced any lone symbols in “elvenword” with an empty string in the list of Quenya words to ensure that the data had only useful elements.
In[]:=
pos=StringSplit[joinpos][[All,-1]];
In[]:=
elvenword=If[Length[#]==0,"",StringReplace[#[[1]],"²"->"","# "->"","¹"->"","³"->"","⁴"->"","† "->"","*"->"","!"->"","?"->"","‽"->"","[ þ ]"->"","[ ñ- ]"->""]]&/@StringSplit[joinpos][[All,;;-2]];
Building Datasets
Building Datasets
Dataset of Quenya phrases and translation
Dataset of Quenya phrases and translation
With the data cleaned and separated, I created a dataset of the phrases so that I could access every phrase linked to its translation easily.
In[]:=
phrasdata=Dataset[Table[<|"ElvishPhrases"->elfphras[[i]],"Translations"->engphras[[i]]|>,{i,369}]]
Out[]=
Dictionary of Quenya words and their parts of speech
Dictionary of Quenya words and their parts of speech
I then did the same for the dictionary information, linking each dictionary word to its part of speech and definition.
In[]:=
dictdata=Dataset[Table[<|"ElvishWord"->elvenword[[i]],"PartofSpeech"->pos[[i]],"Definition"->defs[[i]]|>,{i,2631}]]
Out[]=
Getting Data for the Quenya Dataset
Getting Data for the Quenya Dataset
After importing, cleaning, and making usable the phrases and dictionary data, I started finding information about Quenya through computation. Since the goal of this project was to compare the Quenya language with natural languages, I wanted as holistic a comparison as possible. to me, this meant including phonetics, morphology, and syntax in my comparison. Although the data gained was not perfect, it offers relevant insight into the structure and development of the language of Quenya.
Comparing Word Order
Comparing Word Order
My first comparison was on the syntax of Quenya. For this category, I tested the word order of adjectives and nouns in relation to each other. To do this, I compared the number of sentences in which the adjective preceded the noun and the number that had the reverse structure. Then, I created a Which statement that appended different information to the information category “order of adjective and noun/87A” based on the number of occurrences found in the previous steps. Because both the orders appeared in the phrase data, “3 No Dominant order” was appended to the Quenya dataset.
Although this test showed conclusive results, several factors may have contributed to errors; the most influential of which originates from Quenya’s affix-based grammar system. The affixes, present in every conjugated verb and declined noun, affect the program’s ability to accurately recognize each word in the phrases as relating to it’s dictionary entry. The solution to this issue seemed simple at first: find or create a list of the most common and/or prominent affixes used in Quenya, then remove every occurrence of that string at the beginning/end of the words that contain it, depending on whether the affix in question is a prefix or suffix. This method was not effective, however, for three main reason: first, there are many Quenya words that contain those specific strings in their stems. For example, although the conjugated verb, “tulis” meaning “he had dug”, seems to include the past pluperfect tense prefix “tuli-“, its stem is actually just the verb “tulu”, meaning that if the prefix “tuli-“ was removed, the remainder would simply by the string “s”, which is not a verb. This situation arise because the word is irregular, which brings me to the second issue; Quenya is a heavily irregular language. Even if I managed to thoroughly document every affix used in Quenya, many of them would not be applicable to many words because it was created irregular on purpose. The last issue that may have produced serious errors is that the Wolfram function Nearest[] recognizes vowels as no less important to the structure of a word than consonants, even though vowels are highly mutable in most languages, often taking on changes based on tense or plurality.
Comparing Phonetics
Comparing Phonetics
Next, I found data on the phonetics of Quenya. For this, I focused on a specific phonetic unit: the velar nasal. The velar nasal appears in english words like “sing” and “angst”. Since the dictionary and phrases being used are already transliterated from the Quenya alphabet into the Latin alphabet, the method for searching for the velar nasal is simply searching for “ng” within words . To do this, I used a Which statement. Based on the whether and where the “ng” appears, different information will be appended to the Quenya dataset.
Comparing Placement of Pronominal Subject
Comparing Placement of Pronominal Subject
Another distinctive aspect of language morphology is how languages express pronouns in different parts of word order. Many languages, such as Latin, express their pronominal subjects as suffixes on the verb. For this final category, I found data on the expression of pronominal subject in Quenya. To do this, I selected every phrase from the phrase dataset that included the word “he” in its translation.
Finding all instances of “he” in the phrase translations
Next, I searched for a common word in all of the phrases found by the previous variable. Since there was a large variety of phrases, it was extremely unlikely that any other word would be in common. I then set up an If statement that would append different information to the Quenya dataset based on the results of searching for common words.
If statement; results depend on finding a common word that would mean “he”
The results indicate that no independent particle is required to convey the existence of the subject. The actual placement of the pronominal subject remains ambiguous,however, for the same reasons that prevented an accurate assessment of the noun-adjective order in the previous test. The two remaining options for this situation are either that no independent pronominal subject is ever required/exists, or that an one is sometimes required, whether based on the situation, dialect, or speaker preference. Because of this uncertainty, I made the second option respond “mixed”, conveying that the occasion of a pronominal subject is sometimes expressed independently.
Getting real-world language data from WALS
Getting real-world language data from WALS
After I found data on Quenya syntax, I turned to finding comparable data in the Wolfram Resource Data “World Atlas of Language Structures”. Although the breadth of the information available in this dataset was large, it was very sparse for certain languages and language families. Because of this, the first step to compare Quenya to any of the other language families was to find out what information was common to the language families that I wanted to compare.
First, I gathered and separated the information from the dataset specific to the Celtic, Uralic, and Germanic language families.
Calling the Uralic dataset worked differently than calling its Celtic and Germanic counterparts, because while Uralic languages developed from older Uralic languages, the Celtic and Germanic language groups technically evolved from the proto-Indo-European language. Despite this difference, all three are commonly considered language families in and of themselves, so I will be treating them as equivalent bodies.
Then, I created a list of all the information categories specific to the World Atlas Resource dataset. Because the first 12 categories were almost entirely specific to physical region of language development, I decided them to omit them from my comparison, as Quenya is a constructed language that did not evolve any particular place on Earth.
I then used this function to remove the categories without any information in them from the World Atlas data set for the language families of Uralic, Germanic, and Celtic . I then found the filled information categories common to all the language families using Intersection:
Next, I created an reverse association of the keys and values I used to make the data easier to access. I then created a list of only the keys that I gathered data for in the Quenya dataset.
Next, the unofficial names for each of the information columns used are exchanged for the official names found in the WALS dataset to make the datasets more readable. Then, the Name, Family, and Genus are added to the list.
Curating WALS data into workable, relevant sizes
Curating WALS data into workable, relevant sizes
The next step was to isolate the data in each language family that I would be comparing with the Quenya data. To do this, I applied the list of “usedvalues” to the datasets I had already created for each of the language families. This created datasets with comparable data. Because of the nature of Celtic, Uralic, and Germanic as language families, however, each of their categories include multiple pieces of information.
Here, the data I am using from the WALS dataset is collected into 3 separate datasets with all the information available in each of the categories I put in the Quenya dataset. These datasets are comparable both to each other and to Quenya, which will allow me to make an accurate assessment of their similarities.
Querying Datasets For Analysis
Querying Datasets For Analysis
Getting Lists of Important Features
Getting Lists of Important Features
The final step in this comparison is to visualize the data. To do this, I tabled a list of pie charts, each representing the difference between the Quenya data for a specific information category (outer ring) and the corresponding language family (inner circle).
This function reads a database given to it and gets a list of all instances of a specific linguistic feature.
Here, there are three rows of pie charts. At the outside of each chart is the Quenya data, represented by a certain color. On the inside circle of each circle, the data for a language family is represented. Because each language family contains multiple languages, the inner circles often are split into more than one color to represent the differences between the languages within each family.
Quenya vs Celtic data
Quenya vs Germanic data
Quenya vs Uralic data
Based on the pie charts above, Quenya shows itself to have the greatest number of similarities with the Celtic family among the language families analyzed, with the Uralic family a close second. The similarity is not large, however; most of the qualities explored by this project show themselves to be different in Quenya than in any of the other languages. This is either because the qualities I picked to compare were made different intentionally by Tolkien in order to differentiate his conlang from natural languages, the differences are a coincidence, or because the results I gained from my code were inaccurate. In any case, the results were made from a necessarily but unfortunately small pool of information.
Future Directions
This project lends itself to nearly infinite extensions that could be explored. The comparisons could be extended, both in range and specificity; it is my hope to compare Quenya against every language family, and against every language, both in the World Atlas of Language Structure and beyond. This extension could give a more definite answer to the question of what languages gave Tolkien the most inspiration. This project could also be extended to more of Tolkien’s constructed languages, such as Quenya’s sister language Sindarin, and even beyond that, to conlangs outside the worlds constructed by Tolkien. The scope could also be increased to encompass more of the qualities of the constructed languages. Because of the complex nature of Quenya’s grammar system, knowledge gained in extensions of this project could even aid in the construction of a Quenya translator in the future.
Acknowledgements
Thank you so much to my mentor CJ, who consistently offered support and redirections when I found dead ends, to all the ta’s who helped me, especially Nora, Sophie, and Tianyi, and to all my peers who supported and improved both my methodology and attitude.
Sources
◼
Britannica, The Editors of Encyclopaedia. “Esperanto”. Encyclopedia Britannica, 18 Jun. 2024, https://www.britannica.com/topic/Esperanto. Accessed 11 July 2024.
◼
“Wals Online - Home.” WALS Online - Home, wals.info/. Accessed 9 July 2024.
◼
Strack, Paul. “Quenya Words.” Eldamo, eldamo.org/content/word-indexes/words-q.html. Accessed 2 July 2024.
◼
Strack, Paul. “Quenya.” Eldamo, eldamo.org/content/language-pages/lang-q.html. Accessed 11 July 2024.
◼
Fauskanger), Ardalambion (Helge, et al. “Quenya - Parf Edhellen: An Elvish Dictionary.” Welcome! - Parf Edhellen: An Elvish Dictionary, 1 Jan. 1959, www.elfdict.com/w/quenya.
CITE THIS NOTEBOOK
CITE THIS NOTEBOOK
Comparing the syntax of Quenya and real-world languages
by Mary Carr
Wolfram Community, STAFF PICKS, July 11, 2024
https://community.wolfram.com/groups/-/m/t/3217784
by Mary Carr
Wolfram Community, STAFF PICKS, July 11, 2024
https://community.wolfram.com/groups/-/m/t/3217784