文字列(この場合は会社名)のリストと、ほとんど構造化されていないテキストから会社名のように見えるもののリストを抽出するJavaプログラムがあります。抽出されたテキストの各要素をリスト内の文字列に一致させる必要があります。警告:構造化されていないテキストには、「Blah、Inc。」などのタイプミスがあります。「Blah」などと呼ばれます。LevenshteinEditDistanceを試しましたが、予測可能な理由で失敗します。この問題に取り組むための既知のベストプラクティスの方法はありますか?または、手動のデータ入力に戻りますか?
3 に答える
あなたはApache Stanbolを見たいと思うかもしれません. 私はそれを自分で使用したことがなく、まだインキュベーション中ですが、探しているものに合うかもしれません.
TAC Knowledge Base Population トラック (Entity Linking) にも、この分野に関する少しの調査があります。タスクはさまざまな場所でポップアップ表示され、ACL、EMNLP、SIGIR などの会議でも成功するはずです (このリストは決して完全ではありません)。
TAC システムはウィキペディアのサブセットにリンクしています。ページには「リダイレクト」があり、これは基本的に特定のページのエイリアスであるため、名前のバリエーションに役立つ可能性があります。
たとえば、次のページは「Apple Inc.」にリダイレクトされますが、生のウィキペディア ダンプまたはDBPediaや Freebase などのクリーンなソースからリダイレクトを抽出することをお勧めします。
- AAPL
- アップル社
- アップルコンピュータ
- アップルコンピュータ社
- アップルコンピュータ株式会社
- アップルコンピュータ社
- アップルコンピュータ株式会社
- アップルコンピュータ株式会社
- アップル社
- アップル社
- アップル社
- アップルコンピュータ
- アップルコンピュータ株式会社
- アップル社
- アップル社。
- ...
これは単純な問題ではなく、会社全体がそれを解決しようとして構築されています (会社名と一般的なケースのような縮小された一致セットであっても)。
有効な会社名が該当する個別の数のパターンを特定でき、そのノイズが該当しない場合は、一連の正規表現の一致でこれに取り組むことができます。
パターンが難しい場合やパターンが多すぎる場合は、ベイジアン ネットワークなどの確率モデルの開発を試みることができます。トレーニングのためにデータのサブセットを取得し、おそらく迅速な検証のために 2 番目のサブセットを取得して、ネットワークを拡張します。手法には、遺伝的プログラミングやニューラル ネットワークの設定が含まれる場合があります。このアプローチは明らかに軽量ではありません。この道を進む前に、必要性を慎重に検討する必要があります。
私の会社での仕事では、常にこの種の問題に取り組んでいます。私が見た中で最も成功した取り組みは、ほんの数ページの Python コードを使用したものです。Python は文字列の分析と分析に優れており、Java プログラムから Python ルーチンを呼び出すことができます。グレッグが言ったように、正しい答えは非構造化テキストの品質に大きく依存します。開始する良い方法は、それがゴールデン テキストとどのように一致するかを定量的に特徴付けることです。(たとえば、「Blah Inc.」の代わりに「Blah」や「BLAH INC」などの一般的な代替一致文字列を追加するだけで、80% 一致できる場合があります)。