Skip to content

Instantly share code, notes, and snippets.

@7shi 7shi/calc.py

Created May 10, 2020
Embed
What would you like to do?
[py] Levenshtein distance of conlangs' Swadesh list
# pip install python-levenshtein
import itertools, Levenshtein
with open("swadesh.csv") as f:
data = [line.split(",") for line in f.readlines()]
slang = "English|Esperanto|Ido|Novial|Interlingue|Interlingua"
langs = slang.split("|")
count = len(langs)
split = "|----|%s|" % "|".join(["---:"] * count)
def calc(title, f, g, tostr, rev):
print("# " + title)
print()
print("||%s|" % slang)
print(split)
ds = []
for i in range(count):
row = []
for j in range(count):
if i != j:
d = 0
for words in data:
a, b = words[i], words[j]
d += f(a, b)
d = g(d)
row.append(tostr(d))
if i < j: ds.append((i, j, d))
else:
row.append("")
print("|%s|%s|" % (langs[i], "|".join(row)))
print()
ds.sort(key=lambda x: x[2], reverse=rev)
for r, (i, j, d) in enumerate(ds):
print("%d. %s - %s: %s" % (r + 1, langs[i], langs[j], tostr(d)))
calc("Levenshtein Distance",
Levenshtein.distance, lambda d: d, str, False)
print()
calc("Normalized Levenshtein Distance",
lambda a, b: Levenshtein.distance(a, b) / max(len(a), len(b)),
lambda d: 1 - d / len(data), lambda d: "%0.3f" % d, True)
print()
calc("Jaro-Winkler Distance",
lambda a, b: Levenshtein.jaro_winkler(a, b),
lambda d: d / len(data), lambda d: "%0.3f" % d, True)

Levenshtein Distance

English Esperanto Ido Novial Interlingue Interlingua
English 869 870 768 849 1050
Esperanto 869 456 545 649 843
Ido 870 456 349 417 635
Novial 768 545 349 375 676
Interlingue 849 649 417 375 511
Interlingua 1050 843 635 676 511
  1. Ido - Novial: 349
  2. Novial - Interlingue: 375
  3. Ido - Interlingue: 417
  4. Esperanto - Ido: 456
  5. Interlingue - Interlingua: 511
  6. Esperanto - Novial: 545
  7. Ido - Interlingua: 635
  8. Esperanto - Interlingue: 649
  9. Novial - Interlingua: 676
  10. English - Novial: 768
  11. Esperanto - Interlingua: 843
  12. English - Interlingue: 849
  13. English - Esperanto: 869
  14. English - Ido: 870
  15. English - Interlingua: 1050

Normalized Levenshtein Distance

English Esperanto Ido Novial Interlingue Interlingua
English 0.184 0.199 0.236 0.202 0.177
Esperanto 0.184 0.623 0.498 0.438 0.360
Ido 0.199 0.623 0.674 0.630 0.506
Novial 0.236 0.498 0.674 0.651 0.472
Interlingue 0.202 0.438 0.630 0.651 0.601
Interlingua 0.177 0.360 0.506 0.472 0.601
  1. Ido - Novial: 0.674
  2. Novial - Interlingue: 0.651
  3. Ido - Interlingue: 0.630
  4. Esperanto - Ido: 0.623
  5. Interlingue - Interlingua: 0.601
  6. Ido - Interlingua: 0.506
  7. Esperanto - Novial: 0.498
  8. Novial - Interlingua: 0.472
  9. Esperanto - Interlingue: 0.438
  10. Esperanto - Interlingua: 0.360
  11. English - Novial: 0.236
  12. English - Interlingue: 0.202
  13. English - Ido: 0.199
  14. English - Esperanto: 0.184
  15. English - Interlingua: 0.177

Jaro-Winkler Distance

English Esperanto Ido Novial Interlingue Interlingua
English 0.439 0.460 0.494 0.452 0.447
Esperanto 0.439 0.794 0.701 0.679 0.627
Ido 0.460 0.794 0.846 0.804 0.754
Novial 0.494 0.701 0.846 0.824 0.738
Interlingue 0.452 0.679 0.804 0.824 0.827
Interlingua 0.447 0.627 0.754 0.738 0.827
  1. Ido - Novial: 0.846
  2. Interlingue - Interlingua: 0.827
  3. Novial - Interlingue: 0.824
  4. Ido - Interlingue: 0.804
  5. Esperanto - Ido: 0.794
  6. Ido - Interlingua: 0.754
  7. Novial - Interlingua: 0.738
  8. Esperanto - Novial: 0.701
  9. Esperanto - Interlingue: 0.679
  10. Esperanto - Interlingua: 0.627
  11. English - Novial: 0.494
  12. English - Ido: 0.460
  13. English - Interlingue: 0.452
  14. English - Interlingua: 0.447
  15. English - Esperanto: 0.439
I mi me me yo io
thou vi tu vu tu tu
he li ilu lo il ille
we ni ni nus noi nos
you vi vi vus vu vos
they ili ili los ili illes
this ĉi tio ica disi to-ci iste
that tio ita ti to-ta celle
here ĉi tie hike hir ci hic
there tie ibe dar ta illac
who kiu qua que qui qui
what kio quo quum quo que
where kie ube vor u ubi
when kiam kande quand quande quando
how kiel quale quam qualmen como
not ne ne non ne non
all ĉiuj omna omni omni omne
many multaj multa multi mult multe
some kelkaj kelka kelki quelc alcun
few malmultaj poka poki poc poc
other alia altra altri altri altere
one unu un un un un
two du du du du duo
three tri tri tri tri tres
four kvar quar quar quar quatro
five kvin kin sink quin cinque
big granda granda grandi grand grande
long longa longa longi long longe
wide larĝa larja larji larg large
thick dika dika gros spess spisse
heavy peza grava grav pesant pesante
small malgranda mikra mikri micri parve
short mallonga kurta kurti curt curte
narrow mallarĝa streta angusti strett stricte
thin maldika dina tenu tenui tenue
woman virino muliero fema fémina femina
man viro viro viro mann viro
man homo homo home hom homine
child infano infanto infante infante infante
wife edzino spozino marita marita marita
husband edzo spozulo marito marito marito
mother patrino matro matra matre matre
father patro patro patre patre patre
animal besto animalo animale animale animal
fish fiŝo fisho fishe pise pisce
bird birdo ucelo fogle avie ave
dog hundo hundo hunde cane can
louse pediko lauso lause pedicul pediculo
snake serpento serpento serpente serpente serpente
worm vermo vermo verme verme verme
tree arbo arboro arbre árbor arbore
forest arbaro foresto foreste forest foreste
stick bastono bastono bastone baston baston
fruit frukto frukto frukte fructe fructo
seed semo semino seme seme semine
leaf folio folio folie folie folio
root radiko radiko radike radica radice
bark arboŝelo kortico kortise cortice cortice
flower floro floro flore flor flor
grass herbo herbo gasone herbe herba
rope ŝnuro kordo korde corde corda
skin haŭto pelo pele pelle pelle
meat viando karno karne carne carne
blood sango sango sange sangue sanguine
bone osto osto ose osse osso
fat graso graso grasi grasse grassia
egg ovo ovo ove ove ovo
horn korno korno korne corn corno
tail vosto kaudo kaude caude cauda
feather plumo plumo plume plum pluma
hair haro haro hare capille capillos
head kapo kapo kape cap capite
ear orelo orelo orele orel aure
eye okulo okulo okule ocul oculo
nose nazo nazo nase nase naso
mouth buŝo boko boke bocca bucca
tooth dento dento dente dente dente
tongue lango lango lange lingue lingua
nail ungo unglo ungle ungul ungula
foot piedo pedo pede pede pede
leg kruro gambo gambe gambe gamba
knee genuo genuo genu genú genu
hand mano manuo manu manu mano
wing flugilo alo ale ale ala
belly ventro ventro ventre ventre ventre
guts intestaro intestini intestines intrallia tripas
neck kolo kolo kole col collo
back dorso dorso dorse dorse dorso
breast brusto pektoro pektore péctor pectore
heart koro kordio kordie cordie corde
liver hepato hepato hepate hépate hepato
drink trinki drinkar drinka trincar biber
eat manĝi manjar manja manjar mangiar
bite mordi mordar morda morder morder
suck suĉi sugar suka sucar suger
spit kraĉi sputar sputa sputar sputar
vomit vomi vomar vomi vomir vomitar
blow blovi suflar sufla sufflar sufflar
breathe spiri respirar spira respirar respirar
laugh ridi ridar rida rider rider
see vidi vidar vida vider vider
hear aŭdi audar audi audir audir
know scii savar sava saver saper
think pensi pensar pensa pensar pensar
smell flari flarar flara flarar olfacer
fear timi timar tima timer timer
sleep dormi dormar dormi dormir dormir
live vivi vivar viva viver viver
die morti mortar mori morir morir
kill mortigi ocidar tua mortar occider
fight batali kombatar kombata combatter luctar
hunt ĉasi chasar chasa chassar chassar
hit bati frapar frapa frappar colpar
cut tondi tranchar seka ciser secar
split fendi fendar fenda fender finder
stab mortpiki poniardagar pika picar dagar
scratch grati gratar grata grattar grattar
dig fosi fodar fosa fossar foder
swim naĝi natar svima svimmar natar
fly flugi flugar vola volar volar
walk marŝi marchar marcha ear ambular
come veni venar veni venir venir
lie kuŝi jacar lia jacer jacer
sit sidi sidar sida seder seder
stand stari stacar stea star star
turn turniĝi turnar rota tornar rotar
fall fali falar fala cader cader
give doni donar dona dar dar
hold teni tenar tena tener tener
squeeze premi klemar klema compresser premer
rub froti frotar frota fricter fricar
wash lavi lavar lava lavar lavar
wipe viŝi vishar visha essuyar essugar
pull tiri tirar tira tirar tirar
push puŝi pulsar shova pussar pulsar
throw ĵeti jetar jeta jettar jectar
tie ligi ligar liga nodar ligar
sew kudri sutar suta suer suer
count kalkuli kontar konta contar contar
say diri dicar dikte dir dicer
sing kanti kantar kanta cantar cantar
play ludi ludar plea luder jocar
float flosi flotacar flota flottar flottar
flow flui fluar flua fluer fluer
freeze frostigi frostar frosta gelar gelar
swell ŝveli inflar infla inflar tumer
sun suno suno sune sole sol
moon luno luno lune lune luna
star stelo stelo stele stelle stella
water akvo aquo aque aqua aqua
rain pluvo pluvo pluve pluviar pluvia
river rivero fluvio fluvie fluvie fluvio
lake lago lago lage lago laco
sea maro maro mare mare mar
salt salo salo sale sale sal
stone ŝtono petro petre petre petra
sand sablo sablo sande sable sablo
dust polvo polvo polve polve pulvere
earth tero tero tere terre terra
cloud nubo nubo nube nube nube
fog nebulo nebulo neble nebul nebula
sky ĉielo cielo siele ciel celo
wind vento vento vente vente vento
snow neĝo nivo nive nive nive
ice glacio glacio glasie glacie glacie
smoke fumo fumuro fume fum fumo
fire fajro fairo faire foy foco
ash cindro cindro sindre cindre cinere
burn bruli brular brula arder arder
road strato strado strade strada strata
mountain monto monto monte monte montania
red ruĝa reda red rubi rubie
green verda verda verdi verdi verde
yellow flava flava gelbi yelb jalne
white blanka blanka blanki blanc blanc
black nigra nigra nigri nigri nigre
night nokto nokto nokte nocte nocte
day tago jorno jorne jorne die
year jaro yaro yare annu anno
warm varma varma varm calid calide
cold malvarma kolda koldi frigid frigide
full plena plena plen plen plen
new nova nova nov nov nove
old malnova anciena old old vetere
good bona bona bon bon bon
bad malbona mala mal mal mal
rotten putra putrinta putrit putrid putride
dirty malpura sordida sordid sordid immunde
straight rekta rekta rekt rect recte
round ronda ronda rond rond ronde
sharp akra akuta akut acut acute
dull malakra obtuza obtus ínacut obtuse
smooth glata glata glati glatt lisie
wet malseka humida dessik humid humide
dry seka sika sik sicc sic
correct ĝusta korekta justi just correcte
near proksima proxim proxim proxim proxime
far malproksima for ferni lontan distante
right dekstra dextra dextri dextri dextre
left maldekstra sinistra lefti levul sinistre
at ĉe che che che apud
in en en in in in
with kun kun kun con con
and kaj e e e e
if se se si si si
because ĉar pro ke pro ke pro que proque
name nomo nomo nome nómine nomine
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.