3

PyParser を使用してテキストを解析しようとしています。問題は、空白を含む名前があることです。したがって、私の入力は次のようになります。まず、名前のリスト:

Joe
bob
Jimmy X
grjiaer-rreaijgr Y

次に、彼らがすること:

Joe A
bob B
Jimmy X C

もちろん問題は、彼らが行うことが名前の末尾と同じになる可能性があることです。

Jimmy X X
grjiaer-rreaijgr Y Y

アクション ラインのパーサーを作成するにはどうすればよいですか? 解析の出力Joe A[Joe, A]. 解析の出力は, of -でJimmy X Cある必要があります。つまり、ペアです。[Jimmy X, C]Jimmy X X[Jimmy X, X][name, action]

名前パーサーを素朴に作成するOneOrMore(RegEx("\S*"))と、行全体が一致し[Jimmy X X]、アクションが表示されないという解析エラーが続きます (名前パーサーによって既に消費されているため)。

注: あいまいな言い回しで、NLP の質問のように見えて申し訳ありません。

4

3 に答える 3

2

単純なパーサー以上のものが必要です。パーサーは、文字列内の記号を使用して、文字列のどの部分が文法のさまざまな要素を表すかを定義します。これが、FMが、名前の一部と文の残りの部分をどのように知っているかを示すための手がかりを求めた理由です。名前が1つ以上の大文字の単語で構成されていると言えば、パーサーは名前がいつ停止し、残りの文が開始するかを認識します。

しかし、「jimmy fooが決める」のような名前は?パーサーは、「decides」の記号を見るだけで、「decides」が名前の一部であるかどうかをどのように知ることができますか?あなたの「jimmyfooが食べることに決めた」という文章を読んでいる人間でさえ、名前の始まりと終わり、そしてこれが何らかのタイプミスであったかどうかを判断するのに問題があります。

入力が本当にこれほど予測できない場合は、NLTK(Natural Language Toolkit)などのツールを使用する必要があります。私自身は使用していませんが、構造化データや数学形式を解析しようとするのではなく、言語で文を解析するという観点からこの問題に取り組んでいます。

この種の言語通訳には、pyparsingはお勧めしません。

于 2010-06-05T23:47:29.670 に答える
1

楽しむ:

from pyparsing import Regex, oneOf

THE_NAMES = \
"""Joe
bob
Jimmy X
grjiaer-rreaijgr Y
"""

THE_THINGS_THEY_DO = \
"""Joe A
bob B
Jimmy X C
Jimmy X X
grjiaer-rreaijgr Y Y
"""

ACTION = Regex('.*')
NAMES = THE_NAMES.splitlines()
print NAMES
GRAMMAR = oneOf(NAMES) + ACTION    
for line in THE_THINGS_THEY_DO.splitlines():
    print GRAMMAR.parseString(line)
于 2010-07-03T22:48:33.537 に答える
0

pyparsingではなくnltkが必要なようです。作業するには扱いやすい問題が必要なようです。'jimmy fooが食べることを決定する'を解析する方法をどのように知っていますか?「決定する」がタイプミスではないと(ほとんどの人が想定するのとは反対に)推測するために、どのようなルールを使用しますか?

「空白を含むことができる名前」について:まず、それを1つのスペースに正規化することを望みます。第二に:これは予想外ですか?第3に、名前にはアポストロフィとハイフン(O'Brien、Montagu-Douglas-Scott)を含めることができ、大文字になっていないコンポーネント(Georg von und zu Hohenloheなど)を含めることができます。Unicodeについては触れません。

于 2010-06-05T23:49:03.347 に答える