Třídím francouzštinu jazyková slova v některých textových souborech podle frekvence se zaměřením na náhled spíše než statistickou významnost. Úkolem je zachovat znaky s diakritikou a vypořádat se s tvary členů před samohláskami (l'
, d'
) v kontextu tvarování slovních tokenů pro řazení.
Téma nejčastějších slov v souboru má mnoho tvarů ( 1 | 2 | 3 | 4). Takže jsem dal dohromady tuto funkci pomocí GNU nástroje:
compt1 () {
for i in *.txt; do
echo "File: $i"
sed -e 's/ /
/g' <"$i" | sed -e 's/^[[:alpha:]][[:punct:]](.*)/1/' | sed -e 's/(.*)/L1/' | grep -hEo "[[:alnum:]_'-]+" | grep -Fvwf /path_to_stop_words_file | sort | uniq -c | sort -rn
done
}
…který vyměňuje mezery za nové řádky; ořízne znak následovaný interpunkcí, která je na začátku řádku; pak vše převede na malá písmena; používá tento kompaktní grep
konstrukt, který přiřazuje znaky tvořící slovo k vytvoření žetonů; poté odstraní zastavovací slova a nakonec dojde k obvyklému řazení. Zastavovací soubor obsahuje segment s jednotlivými znaky, takže musíte být opatrní při jeho použití, ale poskytnutá analýza, jak vytvořit kmeny pro slova v různých jazycích, je opravdu zajímavá!
Nyní, když porovnám frekvenci významného slova s výstupem grep -c
přímo na soubory, myslím, že je to dost blízko v rámci určité meze chyby.
Otázky :
- Jak bych to mohl upravit, abych sloučil četnost množných čísel s jejich
tvary jednotného čísla, tj. slovy sdílejícími společnou předponu s různou
příponou znaku? - Snažím se posoudit, zda
grep
konkrétně část by fungovala s tím, co je na OSX ?
Přijatá odpověď:
Se zjednodušeným sed
toho opravdu nebudete schopni skript. Předpokládám, že budete chtít provést redukci na „formy citací“ a sbalit všechna skloňování do základního tvaru.
To znamená, že přídavná jména jako chráněnec, chráněnec, chráněnec, chráněnec všechny se počítají jako totéž, základní přídavné jméno/příčestí chráněnec . Podobně všechna skloňování slovesa protéger — jako protège, protégeons, protégeais, protégeasse, protégeâmes, protégeront, protégeraient , atd. — vše by se zredukovalo na toto základní sloveso.
To znamená, že potřebujete vědět věci o flektivní morfologii jazyka. Ještě horší je, že budete muset pochopit něco o skutečné syntaxi jazyka, včetně skloňování a rozlišování homografů.
Udělal jsem velmi jednoduché přístupy k alespoň první části tohoto pomocí Perlu. Je to opravdu spíše bolest v zadku. Zde je ukázka kódu, který jsem použil pro generování klíčů řazení pro města a obce na Pyrenejském poloostrově:
# 1st strip leading articles s/^L'//; # Catalan s{ ^ (?: # Castilian El | Los | La | Las # Catalan | Els | Les | Sa | Es # Gallego | O | Os | A | As ) s+ }{}x; # 2nd strip interior particles s/b[dl]'//g; # Catalan s{ b (?: el | los | la | las | de | del | y # ES | els | les | i | sa | es | dels # CA | o | os | a | as | do | da | dos | das # GAL ) b }{}gx;
To oddělí články a částice tak, aby se nepočítaly pro účely třídění. Ale budete se muset vypořádat s formami jako l’autre s tzv. kudrnatou uvozovkou, což je ve skutečnosti U+2019 SPRÁVNÁ JEDNOTLIVÁ UVÁDZKA, preferovaná forma apostrofu. Normalizoval jsem je na rovné s s/’/'/g
první.
Jo, a budete se muset vypořádat s kódováním:MacRoman není totéž jako UTF-8 nebo ISO-8859-1 — ani zdaleka ne.
Upřímně řečeno, pravděpodobně budete chtít použít něco jako algoritmus Snowball stembing, specifikující francouzštinu jako jazyk. Určitě Perlova Lingua::Stem::Snowball
modul ví, jak to udělat. Pomocí tohoto dotazu můžete hledat moduly v Perlu, které mají co do činění s francouzskou lingvistikou.
Stemming vás ale zavede jen tak daleko. Opravdu neodvedete dobrou práci, dokud nepoužijete morfosyntaktickou analýzu – což znamená, že musíte vygenerovat analýzu vět a přiřadit slovní druhy ke každému prvku.
To vyžaduje mnohem více práce. Dobrou zprávou je, že pro to existují speciální nástroje, z nichž některé skutečně fungují ve francouzštině. Ale to je opravdu hodně, protože jste se nyní pustili do oblasti zpracování přirozeného jazyka a počítačové lingvistiky. Pro takové otázky zde není žádný velký domov, ale pravděpodobně by se na ně dalo lépe odpovědět na Linguistics.SE; Nevím.