私は現在、一連のメールを解析しており、メールから単語やその他の興味深いトークンを取得したいと考えています (スペルミスや、「zebra21」や「customer242」などの文字と文字の組み合わせがあっても)。しかし、「0013lCnUieIquYjSuIA」と「anr5Brru2lLngOiEAVk1BTjN」が単語ではなく、関連性がないことをどのように知ることができますか? 単語を抽出し、エラーや pgp 署名の一部、またはメールで受け取ったその他のものをエンコードしているトークンを破棄し、それらに決して興味がないことを知る方法は?
3 に答える
単語の適切な基準を決定し、それを適用するための正規表現またはマニュアルを作成する必要があります。
あなたの例から推測できるいくつかのルール:
- 単語は大文字で始めることも、すべて大文字にすることもできますが、単語内に 2 つの大文字と 2 つ以上の小文字が含まれている場合、それは単語ではありません。
- 単語の中に数字がある場合、それは単語ではありません
- それが言うよりも長い場合は、20文字
魔法のトリックはありません。ルールをどうしたいかを決定し、それを実現する必要があります。
もう1つの方法は、ある種の隠れマルコフモデルシステムをトレーニングして、言葉のように聞こえるものを認識することですが、これはあなたがやりたいことに対してやり過ぎだと思います.
http://en.wikipedia.org/wiki/English_words_with_uncommon_propertiesこれらの「一般的でない特性」を持つものを拒否するルールを作成して、ほとんどの実際の単語
を受け入れるシステムを構築できます
私はshooshの答えに概ね同意しますが、彼のアプローチは高い再現率と低い精度を容易に達成できます。単語の定義が厳しすぎる場合は、その逆ですが、「zebra123」のようなケースを見逃す可能性があるため、これも望ましくありません。そこで、精度を向上させる方法に関するいくつかのアイデアを以下に示します。
電子メールのどの部分が本文に属し、どの部分が pgp 署名のようなフッターであるかを判断できるかどうかを検討する価値があるかもしれません. 「-」文字のみで構成される行の下のすべてを切り取るなど、ほとんどの場合に一致するいくつかの単純なヒューリスティックを見つけることができると確信しています。
パフォーマンス基準によっては、単純な単語リストと照合して、単語が実際の単語であるか、または実際の単語を含んでいるかどうかを確認することができます。英語の単語の非常に網羅的なリストを Web 上で見つけるのは簡単です。また、大規模でクリーンなテキスト コーパスから単語を抽出して、自分で編集することもできます。
字句解析器を使用すると、不明としてマークされたすべてのトークンをフィルター処理できます。
いくつかの単純な統計から、何かが単語である可能性がどの程度かがわかります。高頻度で出現するトークンは、おそらく単語です。1 回だけ出現するトークン、または数が特定のしきい値を下回るトークンは、おそらく単語ではありません。一般的なスペルミスは複数回表示される必要があり、一般的でないものは無視されます。
これらの提案が「zebra123」のようなケースでは明らかに機能しない場合もあります。繰り返しになりますが、単純に単語内の数字を切り取ったり分割したりするだけでうまくいく場合があります。
私の一般的なアプローチは、最初に確かに単語であるトークンを識別し (上記の提案を使用して)、次に確実に単語ではないトークンを識別し (正規表現を使用して)、次に残りの数百または数千を (目で) 見ることです。これらを個別に処理するための共通の特性を見つけるためのトークン。