STARLING is a software package, originally created by Sergej A. Starostin, which is designed for historical linguists who want to build their own etymological dictionaries. It is not only a database system that allows its users to set up a very straightforward relational database structure, but also a package full of surprises, since it contains many methods that are supposed to automate specific tasks in historical linguistics. These range from phylogenetic tree reconstruction via the preliminary identification of sound correspondences up to the comparison of elicitation glosses for their semantic similarity. While phylogenetic reconstruction and sound correspondences are now quite successfully handled in alternative software packages, I thought it would be interesting to discuss the routine for assessing concept similarity in more detail, since it offers interesting possibilities for those who practice historical language comparison.
STARLING, originally created by Sergei A. Starostin (1953-2005, see Starostin 2007[1993] for details on the origins of the software), is one of the oldest software packages devoted to computer-based approaches in historical linguistics. Despite the fact that STARLING has been around for a very long time, not many historical linguists seem to know the system very well. This may be in part to the fact that the origins of STARLING (as far as I know) go back to the early 1990s, a time when specifically scholars in historical linguistics worshipped books or personal collections of excerpts (such as reported by Gabelentz 1891 or Swadesh 1963 more than computers, who would often fail to display special characters correctly.
For me personally, STARLING was the first computer program I was really exposed to. I started to use the software when I was still planning to make my PhD in Sinology, and intended to collect a larger database of Chinese characters along with their readings and the like. Later, I was fascinated by the possibilities which STARLING offered in order to infer phylogenetic trees from lexicostatistic datasets (although I never found a proper description of the algorithm that was used there, I only know it cannot be Neighbor-Joining by Saitou and Nei from 1987, since the trees in STARLING are rooted and dated). Many features in STARLING have directly influenced the design of my own LingPy software package for quantitative tasks in historical linguistics, which is now a larger collaborative project, available in version 2.6.5 (List et al. 2019).
While the data structure has by now diverged quite a bit from the one employed by STARLING, many concepts can still be found in LingPy’s basic functions for the manipulation of wordlists. As an example, the function Wordlist.get_etymdict
is equivalent to the procedure by which STARLING creates an initial “etymological dictionary” from a larger number of lexicostatistical wordlists which are annotated for cognacy. Also the fact that cognate sets are represented by integer numbers in LingPy and also in EDICTOR, my attempt to offer a similarly convenient way to annotate cognates as provided by STARLING, is due to the influence from STARLING’s cognate annotation practice.
In addition to these aspects mainly devoted to data storage and data annotation, STARLING also offers some rather complex computational approaches that help to tackle problems of cognate detection. Unfortunately, not many people have ever heard of these methods, since not many people tried to understand the system in all its power, and most of the descriptions of the methods can only be found in the manual (which is deeply hidden in the software files and difficult to access if one hasn’t succeded in installing the software), or in text books, which Sergej A. Starostin co-authored (such as, for example, Burlak and Starostin 2001).
In this context, there are two interesting methods that I want to discuss briefly, one only quickly, and the other method in a bit more detail. They are described in pages 270-275 in the introductory text book by Burlak and Starostin (2005), and treat the identification of regular sound correspondences and etymologically similar meanings.
The algorithm for the detection of sound correspondences is described as follows (ibid. p. 271, my translation):
- a Count the frequency of every phoneme in the list of each of the languages which shall be compared;
- b Take the subset of words N of language A which contain phoneme x;
- c Take the subset of words N’ of language B which happen to be translations of the words of subset N of language A;
- d Count the frequency of each phoneme of language B in subset N’ and compare it with the general frequency of the given phoneme in the whole list of words for language B;
- e Phoneme x’, whose frequency significantly (e.g. according to the three sigma rule) increases the general frequency of the given phoneme, is judged to be corresponding to phoneme x in language A.
What is remarkable is not the description of the procedure itself (the automated identification of sound correspondences was already discussed earlier in the 1990s, as shown by Guy 1994), but the fact that this procedure was readily implemented in software and could readily be used by linguists already with considerably early versions of STARLING.
The same applies to the second method, which I promised to introduce in the title of this post: the method to identify meanings which could be etymologically similar. Here, the information we are given in Burlak and Starostin is even sparser than for the determination of regular sound correspondences:
Meanings are judged to be similar if there is a root of a proto-language whose reflexes in the daughter- languages happen to have these meanings. The list of similar meanings as well as the list of similar sounds are stored in a special file and can be changed easily. (Burlak and Starostin 2005: 272, my translation)
In fact, if one checks the STARLING software, one can find a file shipped with STARLING, called SENSE.DBF
, which consists of two columns, one providing an English headword, and the other providing semantic items. We can find this described in the user manual of STARLING, in the file fSemantic.htm
:
SENSE.DBF is a collection of about 7000 English headwords described in terms of their semantic “attributes” or “constituents” (all in all around 400). All the data was extracted from existing etymological computer databases. A record like (HEADWORD) require (V) (ITEMS) to want;to search;to be;able means that in several cases the meaning “require” was associated with semantic “primitives” “to want”, “to search”, “to be” and “able”.
The following screenshot shows how this file looks in the STARLING version I have currently installed on my computer.

Figure 1: SENSE.DBF as it is represented in the STARLING system.
If one counts the element (STARLING makes it easy to export any database into plain CSV format in UTF-8 encoding), one can see that there are as many as 7048 headwords, and 424 different items. In order to determine similarity between the headwords, one can think of a bipartite graph, that is, a graph that has two different types of nodes, one node type in our case reflecting the headwords, and the other type reflecting individual items. Links can only be made between different node types, and each row in the file SENSE.DBF
describes individual links from the headword to each of the items.
In order to search for similar words according to this collection, all one has to do is to search for words with similar semantic constituents and apply some criteria as to the number of constituents which two headwords should share in order to be judged as being “similar”.
In order make the similarity functions available inside STARLING available in other software projects, I have written a small Python library for the manipulation of semantic data in linguistics, which I decided to call pysen
, as a short form for pysense
, and because this reflects a typical German pronunciation of the word “Python”.
In order to install the library, you need to clone it with git
for the time being, as it has not yet been officially released:
$ git clone https://github.com/lingpy/pysen.git
The easiest way to install the library is to use pip
:
$ pip install -e pysen
Once this is done, you can directly test the semantic comparison based on STARLING’s SENSE.DBF
.
>>> from pysen.sense import Sense >>> sen = Sense() >>> sen.similar('hand') [['hand', 'arm', 's:bone; s:foot; s:hand', 3], ['hand', 'shin-bone', 's:bone; s:foot; s:hand', 3], ['hand', 'calf of leg', 's:bone; s:foot; s:hand', 3], ['hand', 'handful', 's:hand; s:handle', 2], ['hand', 'thigh', 's:bone; s:foot', 2]]
The output is a two-dimensional list consisting of four items each. The first item repeats the headword, since I applied some general operations to “smothen” the lookup, which may result in multiple headwords being called when typing one word alone, as you can easily see when searching for similar words for “ear”.
>>> sen.similar('ear') [['ear 1', 'hear (V)', 's:ear; s:to hear', 2], ['ear 2', 'jujube', 's:fruit; s:thorn', 2], ['ear 2', 'bush', 's:fruit; s:thorn', 2], ['ear 2', 'ear of grain', 's:fruit; s:thorn', 2], ['ear 2', 'hair', 's:skin; s:thorn', 2]]
The second element is the headword judged to be similar by this criterion, the third element provides the semantic attributes, and the last element shows the attribute overlap between the two headwords.
Given that this approach is so straightforward, I could not resist to write a JavaScript equivalent that allows to search interactively for potentially interesting similar meanings. This interface is available at https://digling.org/sense/ and can be invoked by typing any concept in the field one may think of. If no results are returned, this means that no matches could be found for the respective headword, but obvious concepts, such as, for example, thos from Swadesh’s list of 200 items (Swadesh 1952) will all be there, as can be seen in the following screenshot showing matches for “head”.

SENSE.DBF lookup in JavaScript.
I have been reflecting a long time about this approach, and I like the idea to search for semantically similar words by means of attributes, as this is a flexible system that could serve as a counterpart to searching for similar meanings based on colexification studies (Rzymski et al. 2020). What I have not figured out so far, however, is how Starostin arrived at this list and the attributes. In the description in Burlak and Starostin (2005), they talk about words that have been shown to stem from a common root in a proto-language. This makes of course good sense, as it reflects linguists’ intuitive judgments about semantic similarity and plausible pathways of semantic change. However, the 424 semantic attributes in the file SENSE.DBF
do not seem to reflect etymological roots, so it is not clear how the dataset was initially created, and I could not find any additional explanation on it in the literature.
In any case, what I find fascinating about this approach is that it provides historical linguists with an alternative to colexification networks when searching for cognates across different meanings, and I would wich that more linguists would think along these directions and help us to improve our knowledge about plausible and less plausible semantics in our etymologies.
References
Burlak, Svetlana Anatolévna and Starostin, Sergej A. (2001): Vvedenie v lingvističeskuju komparativistiku [Introduction to comparative linguistics]. Moscow:Editorial URSS.
Burlak, Svetlana Anatolévna and Starostin, Sergej Anatolévic (2005): Sravnitelʼno-istoričeskoe jazykoznanie [Comparative-historical linguistics]. Moscow:Akademia.
Gabelentz, Hans Georg C. (1891): Die Sprachwissenschaft. Ihre Aufgaben, Methoden und bisherigen Ergebnisse. Leipzig:T. O. Weigel.
Jacques B. M. Guy (1994): An algorithm for identifying cognates in bilingual wordlists and its applicability to machine translation. Journal of Quantitative Linguistics 1.1. 35-42.
List, Johann-Mattis and Greenhill, Simon and Tresoldi, Tiago and Forkel, Robert (2019): LingPy. A Python library for quantitative tasks in historical linguistics. Version 2.6.5. Max Planck Institute for the Science of Human History. Jena: http://lingpy.org.
Rzymski, Christoph and Tiago Tresoldi and Simon Greenhill and Mei-Shin Wu and Nathanael E. Schweikhard and Maria Koptjevskaja-Tamm and Volker Gast and Timotheus A. Bodt and Abbie Hantgan and Gereon A. Kaiping and Sophie Chang and Yunfan Lai and Natalia Morozova and Heini Arjava and Nataliia Hübler and Ezequiel Koile and Steve Pepper and Mariann Proos and Briana Van Epps and Ingrid Blanco and Carolin Hundt and Sergei Monakhov and Kristina Pianykh and Sallona Ramesh and Russell D. Gray and Robert Forkel and List, Johann-Mattis (2020): The Database of Cross-Linguistic Colexifications, reproducible analysis of cross- linguistic polysemies. Scientific Data 7.13. 1-12.
Saitou, N. and Nei, M. (1987): The neighbor-joining method: A new method for reconstructing phylogenetic trees. Molecular Biology and Evolution 4.4. 406-425.
Starostin, Sergej A. (2007): Rabochaya sreda dlja lingvista [A workplace for linguists]. In: : S. A. Starostin: Trudy po jazykoznaniju [S. A. Starostin: Works on linguistics. Moscow:Languages of Slavic Cultures. 481-496.
Swadesh, Morris (1952): Lexico-statistic dating of prehistoric ethnic contacts. With special reference to North American Indians and Eskimos. Proceedings of the American Philosophical Society 96.4. 452-463.
Morris Swadesh (1963): A Punchcard System of Cognate Hunting. International Journal of American Linguistics 29.3. 283-288.
OpenEdition suggests that you cite this post as follows:
Johann-Mattis List (May 11, 2020). Concept Similarity in STARLING. Computer-Assisted Language Comparison in Practice. Retrieved March 23, 2025 from https://doi.org/10.58079/m6ko