5

このリンクで提供されている OpenNLP パーサー コードを使用してドキュメントを解析したところ、次の出力が得られました。

(TOP (S (NP (NN Programcreek)) (VP (VBZ is) (NP (DT a) (ADJP (RB very) (JJ huge) (CC and) (JJ useful)) (NN website)))))

これから意味のある単語のみを抽出したいのですが、これらの意味のある単語に基づいてさらに分類したいので、すべてのストップワードを削除したいと考えています。解析された出力からストップワードを削除する方法を教えてください。

最後に、以下の出力を取得したい

   (TOP (S (NP (NN Programcreek)) (JJ useful)) (NN website)))))

OpenNLP でそれが不可能な場合は、自然言語処理用の他の Java ライブラリを提案してください。私の主な目的は、ドキュメントを解析して意味のある単語のみを取得することだからです。

4

2 に答える 2

3

OpenNLP に渡す前に、テキストからすべてのストップ ワードを簡単に削除できます。

  1. ストップ ワードを配列に格納する
  2. 「didn't」の前に「did」を削除して「n't」だけになるなどの問題を回避するために、配列を単語の長さで並べ替えます。
  3. 正規表現を使用してすべての単語を削除し、大文字と小文字を区別せずに単語全体のみを削除するようにします

Javaに採用できる.NETでそれを行う方法は次のとおりです。

public string CleanStopWords(string inputText)
{
    string[] stopWords = new string[] { 
        "a", "all", "am", "an", "and", "any", "are", "aren't", 
        "as", "at", "be", "because", "been", "to", "from", "by", 
        "can", "can't", "do", "don't", "didn't", "did" };

    stopWords = stopWords.OrderByDescending(w => w.Length).ToArray();

    string outputText = Regex.Replace(inputText, "\\b" + string.Join("\\b|\\b", stopWords) + "\\b", "", RegexOptions.IgnoreCase);

    return outputText;
}
于 2015-09-03T22:11:21.793 に答える