Väärin tulkittuja yhdyssanoja

Johdanto

Tällä sivulla on sanoja, jotka on jaettu yhdyssanoiksi eri tavalla kuin yleensä.

Kaksi sanaa yhdestä

Sana Selitys
aktivistiyhdynnänaikainen korttipeli
alenevahalpa suo
asemestapyssykauppa
biisisateenkaarivanhempi
diakoniheijastettu hevosen kuva
epistolaepäoikeudenmukainen asiaintila
epolettidoping-positiivinen hiusnäyte
fileeratalihaliukuhihna
funktionaalimatemaattisesti lahjakas napakettu
haipakkapetokalateemaiset pelikortit
haukattavakoirainklusiivinen
haupitsinarttukoira
huohotusturhauttava olio
häävistipariutumiskorttipeli
kamalastihuumekuorma
kapitulikoiraeläimen päivittelyä
kattilahuumefarmi
katveikkohuumekauppias
kemikaalimerilappilainen kasvis
kenguruBarbien parisuhdeneuvoja
kotkotuskanojen kielenhuoltojärjestö
kotlettikanan tukka
kriminaalimiehitetyn niemimaan napakettu
kylläisyysjees-vanhemmuus
kyynäräkäärmekauna
leipomohavaijilainen esihenkilö
loiskinariita siivelläeläjistä
marinoituasadatella pilvessä
moninaisuuspolygamia
paikallepiirakkapoika
parrakasgolffari
peruukkieteläamerikkalainen isoisä
pienokainenvaatimattomat piikit omaava
piipatapuolijohdekeittoastia
pisuaarisata kusineliötä
popparikevyen musiikin duo
portsariviiniin mieltynyt nainen
punkerorokkarien suhteen päättyminen
puudelimauttomien herkkujen kauppa
raikastepääsiäisruohossa aamuisin
seisakekalaviina
siivoojasiisti vesiura
suulaastiratkaisu puheliaisuuteen
temperatuurimaalionni
tiiratagolfkenttä
tiukallemunapoika
topaasihuippujuhta
tupeerataperuukkitehtaan liukuhihna
upslaakivahingonlaukaus
valinnainenyksilahkeinen metallityöläinen
varistorilinturikas kauppapaikka
vauvelimahtava sisarus
voilokkirasvaan mieltynyt rantalintu

Kolme sanaa yhdestä

Sana Selitys
digitalisointidigi-tali-sointi
eksogeenisyysekso-geeni-syys
kapitalisointikapi-tali-sointi
kriminalisointikrimin-ali-sointi
leikillisyyslei-killi-syys
mukautuvaisuusmuka-utu-vaisuus
mutageenisyysmuta-geeni-syys
muukalaistuamuu-kala-istua
näkymättömissänäky-mättö-missä
punkteeratapunk-tee-rata

Kaksi sanaa kahdesta

Sana Selitys
asuntolaivaasuntola-iva
isänisäisä-nisä
julkisoikeusjulki-soikeus
kaivosaukkokaivo-saukko
karjanostajakarja-nostaja
kasvinestekasvin-este
kauppalaivakauppala-iva
keksijänerokeksijän-ero
koulunerokoulun-ero
kuivatelakkakuivate-lakka
kulmanojakulman-oja
lainasanalain-asana
lihanestelihan-este
luomisoppiluomi-soppi
maalieromaa-liero
maanisämaa-nisä
mahanestemahan-este
parsakaalipar-sakaali
pensasaitapensa-saita
pesunestepesun-este
pikariisipikari-isi
rantamatalikkorantama-talikko
solunestesolun-este
sääriparisää-ripari
taiteilijanerotaiteilijan-ero
tuoksuvatukkatuoksuva-tukka
vakavaraisuusvakava-raisuus
vihannestorivihan-nestori
voimanostovoiman-osto
vuokaaviovuoka-avio
vuohissukkavuo-hissukka
yksinoloyksi-nolo
yökasteyök-aste

Kolme sanaa kahdesta

Sana Selitys
aikaansaannosaika-ansa-annos
aikaansaantiaika-ansa-anti
asuintoveriasu-into-veri
biokaasubi-oka-asu
erikoisosaamineneri-koiso-saaminen
fenolimuovifeno-limu-ovi
hautausavustushau-tau-savustus
hermostoperäinenhermo-stop-eräinen
hienovaraisuushie-nova-raisuus
katetuottokat-etu-otto
koroillaaneläjäkoroilla-ane-läjä
kuivatuskaappikuiva-tuska-appi
kutsumustyökutsu-must-yö
kuurupiilokuu-rupi-ilo
lainansaantilain-ansa-anti
lääkärinammattilääkäri-nam-matti
maaliruiskumaa-liru-isku
maalitilannemaa-liti-lanne
nuorisoseuranuori-sose-ura
nuorisotakuunuori-sota-kuu
opintopiiriopin-top-iiri
oraalinesteora-alin-este
palautusoikeuspala-utu-soikeus
pienituloinenpien-itu-loinen
puhelinosakepuhe-lino-sake
rapakuntoinenrap-akun-toinen
saaristolaivasaari-stola-iva
suolasilakkasuo-lasi-lakka
suolikaasusuo-lika-asu
suuntaviivasuun-tavi-iva
suurisanainensuu-risa-nainen
takaisinostotaka-isi-nosto
tietopohjatie-top-ohja
toppapusakkatop-papu-sakka
tunturipeuratuntu-ripe-ura
tuomiokapitulituomi-okapi-tuli
uskomustarinausko-must-arina
vajaakuntoinenvaja-akun-toinen
varastosiilovaras-tosi-ilo
vasarajuotinvasa-raju-otin
vastapelaajavast-ape-laaja
viistoperäviis-top-erä
voimakassanainenvoima-kassa-nainen
vuohipukkivuo-hip-ukki
vuokaruokavuo-karu-oka
vuosivuokravuo-sivu-okra
yksisoluinenyks-iso-luinen

Neljä sanaa kahdesta

Sana Selitys
kuurupiilosillakuu-rupi-ilo-silla
nuorisopoliisinuor-iso-poli-isi
paikallispoliisipai-kallis-poli-isi
rapautumissorarapa-utu-miss-ora

Ohjelma

Python-ohjelma, jolla sanat on etsitty. Vaatii sanalistat täältä.

MIN_WORD_LEN = 2

# no nouns or verbs; no acronyms either
EXCLUDE_WORDS = frozenset((
    "aa", "ah", "ai", "ani", "asti", "au", "av",
    "di",
    "eli",
    "ha", "haa", "hah", "he", "hei", "hi", "hoi", "hui", "hus", "hä", "hän",
    "in",
    "ja", "jee", "jo", "jos", "juu",
    "kai", "kait", "kap", "kas", "kii", "kis", "kop",
    "lainen",
    "ma", "mainen", "maisesti", "maisuus", "mar", "me", "mi", "moinen", "mut", "mä",
    "ne", "no", "noi", "noin", "nuo",
    "oh", "oi", "op", "ota",
    "pas", "per", "pois", "puh", "pus", "pöh",
    "ry",
    "sa", "se", "sen", "so", "soo", "sun", "sus", "sä",
    "taa", "tai", "te", "toi", "tse", "tuut", "tä", "tämä", "tää",
    "ula", "ups",
    "vai", "vau", "vek", "via", "vip", "viuh",
    "yh", "yht",
))

def get_words(filename):
    with open(filename, "rt", encoding="utf8") as handle:
        handle.seek(0)
        for line in handle:
            line = line.rstrip()
            if line:
                yield line

def split_in_two(word):
    # generate tuples of two strings
    for i in range(MIN_WORD_LEN, len(word) - MIN_WORD_LEN + 1):
        yield (word[:i], word[i:])

def split_in_three(word):
    # generate tuples of three strings
    for i in range(MIN_WORD_LEN, len(word) - MIN_WORD_LEN * 2 + 1):
        for j in range(i + MIN_WORD_LEN, len(word) - MIN_WORD_LEN + 1):
            yield (word[:i], word[i:j], word[j:])

def split_in_four(word):
    # generate tuples of four strings
    for i in range(MIN_WORD_LEN, len(word) - MIN_WORD_LEN * 3 + 1):
        for j in range(i + MIN_WORD_LEN, len(word) - MIN_WORD_LEN * 2 + 1):
            for k in range(j + MIN_WORD_LEN, len(word) - MIN_WORD_LEN + 1):
                yield (word[:i], word[i:j], word[j:k], word[k:])

def split_word(word, partCnt):
    if partCnt == 2:
        yield from split_in_two(word)
    elif partCnt == 3:
        yield from split_in_three(word)
    elif partCnt == 4:
        yield from split_in_four(word)
    else:
        sys.exit("Can only split in 2-4 parts.")

def main():
    allWords  = set(get_words("plaintext.txt")) - EXCLUDE_WORDS
    singles   = set(get_words("singles.txt"))   & allWords
    finals    = set(get_words("finals.txt"))    - EXCLUDE_WORDS
    nonfinals = set(get_words("nonfinals.txt")) - EXCLUDE_WORDS
    compounds = set(get_words("compounds.txt"))

    wordOrder = sorted(singles)
    for partCnt in range(2, 4 + 1):
        print(f"*** Non-compounds into {partCnt} parts ***")
        for word in wordOrder:
            for parts in split_word(word, partCnt):
                if (
                    all(p in singles or p in nonfinals for p in parts[:-1])
                    and (parts[-1] in singles or parts[-1] in finals)
                ):
                    print(f"{word:17}" + " = " + "-".join(parts))
        print()

    for srcPartCnt in range(2, 9 + 1):
        wordOrder = sorted(w for w in compounds if w.count("_") == srcPartCnt - 1)
        for dstPartCnt in range(2, 4 + 1):
            print(f"*** {srcPartCnt}-part compounds into {dstPartCnt} parts ***")
            for word in wordOrder:
                origWord = word.replace("_", "")
                for parts in split_word(origWord, dstPartCnt):
                    if (
                        all(p in singles or p in nonfinals for p in parts[:-1])
                        and (parts[-1] in singles or parts[-1] in finals)
                        and set(parts).isdisjoint(set(word.split("_")))
                    ):
                        print(f"{origWord:25}" + " = " + "-".join(parts))
            print()

main()