少し変わった要件で多くの自然言語処理を行っています。多くの場合、見出し語化に似たタスクを取得します。単語 (またはテキストの一部) が与えられた場合、いくつかのパターンを見つけて、何らかの方法で単語を変換する必要があります。たとえば、スペルミスを修正する必要がある場合があります。たとえば、「eatin」という単語が与えられた場合、それを「eating」に変換する必要があります。または、「あははは」、「あはははは」などの単語を「あはは」などに変換する必要があるかもしれません。
そのため、そのような場合の変換ルールを定義できる汎用ツールを探しています。ルールは次のようになります。
{w}in -> {w}ing
aha(ha)+ -> ahaha
つまり、キャプチャされたパターンを左側から右側に使用できるようにする必要があります。
私はプログラミングをまったく知らない言語学者と仕事をしているので、理想的には、このツールは外部ファイルと単純な言語をルールに使用する必要があります。
私は Clojure でこのプロジェクトを行っているので、理想的にはこのツールは JVM 言語 (Java、Scala、Clojure) のいずれかのライブラリである必要がありますが、他の言語やコマンド ライン ツールも問題ありません。
GATE、Stanford CoreNLP、NLTKなど、非常に優れた NLP プロジェクトがいくつかありますが、私はそれらすべての専門家ではないため、必要なツールを見逃す可能性があります。もしそうなら、私に知らせてください。
私はいくつかの言語で作業しており、非常に異なるタスクを実行しているため、具体的な言語の具体的なレンマタイザー、ステマー、スペルミスの修正などは私のニーズに合わないことに注意してください-もっと汎用的なツールが本当に必要です。
アップデート。必要なものの詳細/例をいくつか提供する必要があるようです。
基本的に、テキストをある種の正規表現 (Java の に似ています) に置き換える関数が必要ですが、キャッチされたテキストを置換文字列で使用String.replaceAll()
する可能性があります。たとえば、現実世界のテキストでは、人々は特定の単語を強調するために文字を繰り返すことがよくあります。これらの繰り返しの "oooo" を 1 文字だけに置き換えることができる必要があります。したがって、次のようなルールがあるかもしれません (この投稿で以前に使用したものと同様の構文で):
{chars1}<char>+{chars2}? -> {chars1}<char>{chars2}
つまり、いくつかの文字 ( chars1
) で始まり、少なくとも 3 文字で、場合によっては他の文字 ( chars2
) で終わる単語を同様の文字列に置き換えますが、単一の . ここでの重要なポイントは、ルールの左側でキャッチし、右側で使用することです。