GNU/Linux >> Linux の 問題 >  >> Linux

英語以外の言語のテキストの単語の頻度:単数形と複数形などをマージするにはどうすればよいですか?

フランス語を並べ替えています 頻度に応じた一部のテキストファイルの言語単語 洞察に焦点を当てて 統計的有意性ではなく。課題は、アクセントのある文字を保持し、母音の前の記事フォームを処理することです(l'd' )並べ替えのための単語トークンの形成のコンテキストで。

ファイル内で最も頻繁に使用される単語のトピックは、さまざまな形を取ります(1 | 2 | 3 | 4)。そこで、 GNUを使用してこの関数をまとめました。 ユーティリティ:

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
}

…スペースを改行と交換します。行の先頭にある文字の後に句読点を付けてトリミングします。次に、すべてを小文字に変換します。このコンパクトなgrepを使用します トークンを作成するために単語構成文字と一致する構成。次にストップワードを削除し、最後に通常の並べ替えがあります。ストップファイルには個々の文字を含むセグメントが含まれているため、使用方法に注意する必要がありますが、さまざまな言語の単語の語幹を作成する方法について提供された分析は非常に興味深いものです。

ここで、重要な単語の頻度をgrep -cの出力と比較すると ファイルに直接、ある程度の誤差の範囲内で十分に近いと思います。

質問

  • これを変更して、複数形の頻度を
    単数形、つまり、1
    文字の接尾辞が変化する共通の接頭辞を共有する単語とマージするにはどうすればよいですか?
  • grepかどうかを評価しようとしています 特に一部は、 OSXの内容で機能します ?

承認された回答:

単純なsedでは実際にこれを行うことはできません。 脚本。すべての語尾変化を基本形にまとめて、「引用形式」に縮小することをお勧めします。

つまり、protégé、protégés、protégée、protégéesのような形容詞 すべて同じものとして数えられます。基本形容詞/分詞protégé 。同様に、動詞protégerのすべての語尾変化 — protège、protégeons、protégeais、protégeasse、protégeâmes、protégeront、protégeraientなど 、など—すべてその基本動詞に還元されます。

つまり、言語の語形変化について知る必要があります。さらに悪いことに、語尾変化や同綴異義語の区別など、言語の実際の構文について何かを理解する必要があります。

私は非常にやりました Perlを使用したこの最初の部分への単純なアプローチ。本当にお尻の痛みです。イベリア半島の都市や町の並べ替えキーを生成するために使用したコードのサンプルは次のとおりです。

       # 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;

これにより、記事とパーティクルが削除され、並べ替えの目的でカウントされなくなります。ただし、 l’autreのようなフォームを処理する必要があります いわゆるカーリークォートを使用します。これは、実際にはU + 2019 RIGHT SINGLE QUOTATION MARKであり、アポストロフィに適した形式です。 s/’/'/gを使用してそれらをストレートなものに正規化しました 最初。

関連:ログインシェルと非ログインシェルの違いは?

ああ、そしてあなたはエンコーディングに対処しなければならないでしょう:MacRomanはUTF-8やISO-8859-1と同じではありません—長い目で見ればそうではありません。

正直なところ、言語としてフランス語を指定して、Snowballステミングアルゴリズムのようなものを使用したいと思うかもしれません。確かにPerlのLingua::Stem::Snowball モジュールはこれを行う方法を知っています。このクエリを使用して、フランス語の言語学に関係するPerlモジュールを検索できます。

しかし、ステミングはこれまでのところあなたを連れて行くだけです。形態統語論的分析を適用するまで、実際には良い仕事をすることはできません。つまり、文の構文解析を生成し、そこにある各要素に品詞を割り当てる必要があります。

これにはさらに多くの作業が必要です。幸いなことに、これには専用のツールがあり、そのうちのいくつかは実際にフランス語で機能します。しかし、あなたは自然言語処理と計算言語学の分野に挑戦したので、これは本当に大きな問題です。ここにはそのような質問をするのに最適な場所はありませんが、Linguistics.SEで答えた方がよいかもしれません。わかりません。


Linux
  1. パテにコピーアンドペーストする方法

  2. クラウドテクノロジーはどのようにeラーニングと遠隔教育に力を与えることができますか?

  3. Linux を使用して、テキスト内のスペルミスのあるすべての単語のリストを取得するにはどうすればよいですか?

  1. キーボード入力とテキスト出力はどのように機能しますか?

  2. 2 値のテキスト データをバイナリ (ビット表現) に変換するにはどうすればよいですか?

  3. /etc/hosts と DNS はどのように連携してホスト名を IP アドレスに解決しますか?

  1. テキスト/パターンの最初の 2 つのインスタンスの間の単語を取得するにはどうすればよいですか?

  2. ls を所有者とグループでソートするにはどうすればよいですか?

  3. Linuxでプレーンテキストを正当化するにはどうすればよいですか?