JAWSを使用してWordNetにアクセスしています。与えられた単語が固有名詞かどうかを検出する方法はありますか? シンセットにはかなり粗い語彙カテゴリがあるようです。
明確にするために、単語にはコンテキストはありません。単語は個別に提示されているだけです。単語が普通名詞として使用できると考えられる場合、それは許容されます。したがって、「マーク」は問題ありません。誰かの名前である可能性がありますが、ポイントを参照することもできるからです。しかし、「アフリカ」はそうではありません。
残念ながら、WordNet synset から固有名詞情報を確実に判別することはできません。あなたが探しているのはNamed Entity Recognitionです。ウィキペディアのページから Java で利用可能ないくつかのバージョンへのリンクがあります。個人的にはStanford NERまたはLingPipeをお勧めします。
更新しました:
単語のコンテキストがないという追加の制約に基づいて、大文字化を主要な指標として使用し、WordNet を再確認して、単語が名詞として使用できるかどうかを確認できます。おそらく次のようなものです:
String word = "foo";
boolean isProperNoun = false;
if (Character.isUpperCase(word.charAt(0))) {
WordNetDatabase database = WordNetDatabase.getFileInstance();
Synset[] synsets = database.getSynsets(word, SynsetType.NOUN);
isProperNoun = synsets.length > 0;
}
これにより、次のような誤検知がなくなります。
あなたがそれを構築する場合...あなたが望むように...
ああ
、ロミオ、ロミオ...
それでも、大文字の名詞だけをキャッチします
マルコの書にはこう書かれています...最近 、The Rootsや The Who を聴いたことがありますか?
それでも誤検知が発生します
最初のインスタンスをマークしてください...
予約してください、ダンノ。
可能性はありますが、コンテキストがなければわかりません。
より巧妙になりたい場合は、任意の名詞の上位語ツリーをたどって、「会社」や「国」などの明白なものに到達したかどうかを確認できます。ただし、私が WordNet を最後に使用したとき (4 年前) は、上位語/下位語の関係はあまり信頼性がなく、一貫性もありませんでした。文脈依存)。
Linux コマンドラインを使用して Wordnet を使用する場合、'wn -synsn' を使用して単語のすべての synset を取得できます。固有名詞は大文字になります。例えば、
$: wn mark -synsn
Synonyms/Hypernyms (Ordered by Estimated Frequency) of noun mark
15 senses of mark
Sense 1
mark, grade, score
=> evaluation, valuation, rating
.
.
.
Sense 8
Mark, Saint Mark, St. Mark
INSTANCE OF=> Apostle, Apostelic Father
INSTANCE OF=> Evangelist
INSTANCE OF=> saint
しかし、真剣に、これを Wordnet だけに頼らないでください。Wordnet が情報を取得しない固有名詞は無数にある可能性があります。たとえば、Henrik という名前を試してみてください。
ただし、 Google n-gram コーパスなどのデータセットから単語wのコンテキストを構築し、そのようなコンテキストを使用して、信頼スコアを返す分類器を構築できます (つまり、分類器はwが 0 < の固有名詞であると言うことができます)。 = c <= 1 信頼度)
これをあなたの前に走らせてください。文脈から単語の品詞を判断することはできないという事実を理解するには、英語に関する本をさらに何冊か読む必要があるかもしれません。
あなたができる最善のことは、除外をテストすることです...WordNetが特定の品詞での使用法を認識していないことを判断します。場合によっては、品詞が 1 つしか WordNet にリストされていないことがあります。たとえば、「car」が名詞以外に使われていないことを私は知っています。
固有名詞と一般名詞を区別することはさらに困難です。確かにヒューリスティックを使用できます... 文の最初の単語ではなく、大文字であるが ALLCAPS ではない名詞は、おそらく固有名詞です。
最終的に、区別は字句解析ではなくセマンティクスの 1 つです。WordNet で単語を検索することに基づいて、かなり堅牢なソリューションが見つかるとは思えません。名詞を確実に抽出する前に、自然言語の文法解析を行う必要があると思います。
その情報は、WordNet に特別に保存されているようには見えません。ただし、名詞 sysnet の最初の語形を調べて、大文字かどうかを確認できます。それがどれほど公式なのかはわかりませんが、 fly は固有名詞ではなく、 France は固有名詞であることを伝えているようです.