4

巨大なテキストで検索する必要がある人物のフルネームの膨大なリストがあります。

名前の一部のみがテキストに表示される場合があります。また、スペルミス、ミスタイプ、または省略される可能性があります。テキストにはトークンがないため、テキストのどこから人名が始まるかわかりません。そして、名前がテキストに表示されるかどうかはわかりません。

例:

リストに「バラク・フセイン・オバマ」があるので、次のテキストでその名前が出現するかどうかを確認する必要があります。

  • ...バラク・オバマ候補が合衆国大統領に選出された... (不完全)
  • ...バラク・フセイン候補が米国大統領に選出された... (不完全)
  • バラク・ホー候補がアメリカ合衆国大統領に選出された…(省略)
  • バラク・オバナ候補が合衆国大統領に選出された…(つづり間違い)
  • ...バラク・オバマ候補がアメリカ合衆国大統領に選出された... (タイプミス、B は V の隣)
  • ...ジョン・マケイン候補は選挙に敗れた... (オバマの名前は出てこない)

確かに決定論的な解決策はありませんが...

この種の検索に適したヒューリスティックは何ですか?

しなければならない場合、どのようにしますか?

4

8 に答える 8

6

200ページくらいあるって言ってたな

それを 200 個の 1 ページの PDF に分割します。

名前のリストとともに、各ページを Mechanical Turk に掲載します。ページあたり約 5 ドルの報酬を提供します。

于 2008-12-23T20:51:59.310 に答える
5

特殊文字 (コンマ、ピリオドなど) を削除して、すべてをスペースで分割します。次に、soundexなどを使用してスペルミスを処理します。または、大量のドキュメントを検索する必要がある場合は、luceneなどを使用できます。

于 2008-12-03T21:12:34.773 に答える
2

必要なのは自然言語処理ライブラリです。固有名詞のサブセットを識別しようとしています。名前が固有名詞の主なソースである場合、それはより困難になるよりも、他の固有名詞がかなりの数含まれていれば簡単です。Java で記述している場合は、OpenNLP または C# SharpNLP を参照してください。すべての固有名詞を抽出したら、おそらく Wordnet を使用して、名前以外の固有名詞のほとんどを削除できます。wordnet を使用して「John」などの名前のサブパーツを識別し、隣接するトークンを検索して名前の他の部分を吸い上げることができる場合があります。「John Smith Industries」のようなもので問題が発生します。基になるデータを調べて、問題を絞り込むために利用できる機能があるかどうかを確認する必要があります。

NLP ソリューションを使用することは、同様の問題に対して私が見た唯一の真に堅牢な手法です。200 ページは実際にはかなり小さいため、まだ問題が発生する可能性があります。理想的には、より多くのテキストを用意し、より多くの統計手法を使用して、名前と非名前を区別できるようにします。

于 2008-12-20T16:05:55.270 に答える
1

一見したところ、私はインデックスサーバーに行きます。lucene、FAST、または Microsoft インデックス サーバー。

于 2008-12-03T21:15:38.590 に答える
1

C# と LINQ を使用します。スペース上のすべての単語をトークン化し、LINQ を使用してテキストを並べ替え (場合によっては Distinct() 関数を使用して)、関心のあるすべてのテキストを分離します。テキストを操作するときは、必要に応じて、元のドキュメントのテキストを再配置できるように、インデックス (LINQ で実行できます)。

于 2008-12-24T03:20:33.580 に答える
0

私が考えることができる最良の方法は、python NLTKで文法を定義することです。ただし、必要なものに対しては非常に複雑になる可能性があります。

いくつかのプログラミングで順列のリストを生成しながら、私は個人的に正規表現に行きます。

于 2008-12-03T21:08:28.650 に答える
0

SQL ServerOracleの両方に組み込みの SOUNDEX 関数があります。

さらに、使用できる DIFFERENCE と呼ばれる SQL Server 用の組み込み関数があります。

于 2008-12-03T21:24:33.547 に答える
-1

純粋な古い正規表現スクリプトで十分です。

Ruby を使用すると、非常に高速です。行を読み、単語を一致させます。

乾杯

于 2008-12-03T22:20:49.720 に答える