1

次の形式の平文があるとします。

John Doe、Suzy Q、Sue N. Sough、Michael Blanks、ウィザーズ大学、イギリス

John Doe、Normal Place、ポルトガルおよび Suzy Q、Other Place、フランス

John Doe と Suzy Q、3 番目の場所、ドイツ

John Doe、Suzy Q および Doug Z Doug、4 番目のロケーション、ポーランドおよび Simon Pft、5 番目のロケーション、韓国

正しく解析されると、データは次のようになります。

[{
    'organization': "Wizards University",
    'country': "United Kingdom",
    'authors': ["John Doe", "Suzy Q", "Sue N. Sough", "Michael Blanks"]
}]


[ {
    'organization': "Normal Place",
    'country': "Portugal",
    'authors': ["John Doe"]
}, {
    'organization': "Other Place",
    'country': "France",
    'authors': ["Suzie Q"]
} ]


[{
    'organization': "Third Location",
    'country': "Germany",
    'authors': ["John Doe", "Suzy Q"]
}]


[ {
    'organization': "Fourth Location",
    'country': "Poland",
    'authors': ["John Doe", "Suzy Q", "Doug Z. Doug"]
}, {
    'organization': "Fifth Location",
    'country': "Korea",
    'authors': ["Simon Pft"]
} ]

人間がこのテキストを見て正しく解析するのは非常に簡単ですが、一緒にリストされた一連の名前を見ているかどうかを読み取って認識できるスクリプトを作成する方法があるかどうか疑問に思っています。andつまり、コンマとs を探すだけのばかげたパーサーから始めて、

John Doe、Suzy Q、Sue N. Sough、Michael Blanks、ウィザーズ大学、イギリス

のように見える

John Doe、Normal Place、ポルトガルおよび Suzy Q、Other Place、フランス

次のように解析できます。

[{
    'organization': "Suzy Q",
    'country': "Sue N. Sough",
    'authors': ["John Doe"]
} , {
    'organization': "Wizards University",
    'country': "United Kingdom",
    'authors': ["Michael Blanks"]
}]

決定的で迷惑な追加!

国は、特に組織の名前に暗示されている場合は特に表示されません。

したがって、レコードは次のようになる場合があります。

John Doe、Suzy Q、Sue N. Sough、Michael Blanks、ウィザーズ大学

John Doe、ポルトガル大学、Suzy Q、Other Place、フランス

John Doe と Suzy Q、3 番目の場所

John Doe, Suzy Q and Doug Z Doug, Fourth Location, Polish and Simon Pft, 高麗大学

そのため、国名 (韓国、韓国、大韓民国など、非標準的な方法で書式設定されている) を使用できるレコードもありますが、すべてのレコードで機能するとは限りません。

私がやったことは…</h3>

…私が知っている最もスマートなパターン認識ツールを使用していました - 私。探した正規表現の検索と置換を使用してドキュメントをスキャンしたところ、\s*(,|&|\band\b)\s*それが名前の間で|ある場合は で置き換え、名前のグループ間である場合は で置き換えました;。幸いなことに、データ セットは十分に小さかった (合計 100 をはるかに下回る) ため、費やした時間は、十分にインテリジェントなパーサーを作成するのにかかる時間よりも短くなりました。私ベイジアン分類器を使い始めました。これは、人々の名前と組織を区別するのに問題ありませんでしたが、それでも、私の目的にはうまくいかないほど頻繁にどちらか一方を誤認しました。

4

3 に答える 3

0

Shasanは正しい方向に進んでいると思います。国名は、ユニットの終わりを定義します。最後から2番目のトークン(「、」で分割)は会社名であり、残りのトークンは名前です。

これを破るユースケースは、次のように、同じ国に2人の会社のタプルがある場合です。

John Doe、Normal Place、およびSuzy Q、Other Place、フランス

また、テキストに会社名の一部であるコンマがある場合。これらを保護するために引用符が使用される場合があります。

于 2013-02-22T23:01:05.910 に答える
-1
l=Line.split(",")
Row = {
    "Org": l[-2],
    "Ctry": l[-1],
    "Authors": l[:-2]
}
于 2013-02-23T00:04:09.380 に答える