GNU/Linux >> Znalost Linux >  >> Linux

Frekvence slov v neanglickém textu:Jak mohu sloučit jednotné a množné číslo atd.?

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í.

Související:Rozdíl mezi přihlašovacím prostředím a nepřihlašovacím prostředím?

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.


Linux
  1. Jak funguje vstup z klávesnice a textový výstup?

  2. Jak může cloudová technologie posílit eLearning a distanční vzdělávání?

  3. Jak se liší \n a \r na Linuxu a Windows?

  1. Jak zkopírovat a vložit v Putty

  2. Jak mohu převést dvouhodnotová textová data na binární (bitová reprezentace)

  3. Jak `/etc/hosts` a DNS spolupracují při překladu názvů hostitelů na IP adresy?

  1. Jak mohu získat slova mezi prvními dvěma výskyty textu/vzoru?

  2. Jak mohu seřadit ls podle vlastníka a skupiny?

  3. Jak mohu ospravedlnit prostý text v Linuxu?