次のコードを使用して、pos-tagging と文の分割に MaxEntTagger を使用しています。
MaxentTagger tagger = new MaxentTagger("models/left3words-wsj-0-18.tagger");
@SuppressWarnings("unchecked")
List<Sentence<? extends HasWord>> sentences = MaxentTagger.tokenizeText(new BufferedReader(new StringReader(out2)));
for (Sentence<? extends HasWord> sentence : sentences) {
content.append(sentence + "\n");
Sentence<TaggedWord> tSentence = MaxentTagger.tagSentence(sentence);
out.append(tSentence.toString(false) + "\n");
}
問題は、テキストにトークン化できない文字があると文句を言うことです。タグ付けされた出力では、これらのトークン化できない文字が省略されます。たとえば、元のテキストは次のとおりです。Σ を関数記号の有限集合、署名とします。
ここで、Σ は big5 コードです。ただし、プログラムは次の警告メッセージを表示します: Untokenizable: Σ (10 進数の最初の文字: 931)
タグ付けされた出力は次のとおりです。/VB を/VB a/DT 有限/JJ セット/IN の NN 関数/NN シンボル/NNS ,/、/DT 署名/NN ./ とします。
私が得た分割文は次のとおりです。関数記号の有限集合、署名をしましょう。
私の質問は、これらのトークン化できない文字を保持する方法ですか?
モードの props ファイルを変更しようとしましたが、うまくいきませんでした:
Tagger Training は、Sun Sep 21 23:03:26 PDT 2008 に次の引数で呼び出されます。 モデル = left3words-wsj-0-18.tagger arch = left3words,naacl2003unknowns,wordshapes(3) trainFile = /u/nlp/data/pos-tagger/train-wsj-0-18 ... エンコーディング = Big5 initFromTrees = false
なにか提案を?
マニング教授の助けに感謝します。しかし、パーサー ツリーを使用すると、同じ問題が発生します。
続編
文のパーサー ツリーを取得する必要があるため、次のコードを使用しました。
PTBTokenizer<Word> ptb = PTBTokenizer.newPTBTokenizer(new StringReader(sentences));
List<Word> words = ptb.tokenize();
Tree parseTree2 = lp.apply(words);
TreebankLanguagePack tlp = new PennTreebankLanguagePack();
GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory();
GrammaticalStructure gs = gsf.newGrammaticalStructure(parseTree2);
しかし、今回トークン化できない文字の問題を解決するための PTBTokenizer の設定方法がわかりません。ファクトリ メソッドを使用して PTBTokenizer オブジェクトを生成する場合、それを StringReader に連結する方法がわかりません。
List<Word> words = ptb.getTokenizer(new StringReader(sentences));
動作しません。