1

入力された文字列からいくつかの標準的な要素を抽出できるように、ユーザーに簡単な質問をさせたいと考えています。

入力する文字列の例:

  • ダークナイトの監督は?
  • 中国の首都は?
  • アメリカの大統領は誰?

ご覧のとおり、「誰が」の場合もあれば、「何を」の場合もあります。私はおそらく「|」を探しています オペレーター。これらの文字列から 2 つのものを抽出する必要があります。「the」の後と「of」の前の単語、および「of」の後の単語。

例えば:

"director"第 1 文: 抽出して という変数に入れたい、抽出Relationして"The Dark Knight"という変数に入れたいConcept

望ましい出力:

RelationVar = "director"
ConceptVar = "The Dark Knight"

2 文目: 「資本」を抽出し、変数「関係」に代入し、「中国」を抽出して変数「概念」に配置します。

RelationVar = "capital"
ConceptVar = "China"

re.match関数の使用方法に関するアイデアはありますか? または他の方法?

4

2 に答える 2

1

|誰に/何に使いたいかは正しいです。正規表現の残りの部分は非常に単純です。わかりやすくするためにグループ名が表示されていますが、r"(?:Who|What) is the (.+) of (.+)[?]"代わりに使用することもできます。

>>> r = r"(?:Who|What) is the (?P<RelationVar>.+) of (?P<ConceptVar>.+)[?]"
>>> l = ['Who is the director of The Dark Knight?', 'What is the capital of China?', 'Who is the president of USA?']
>>> [re.match(r, i).groupdict() for i in l]
[{'RelationVar': 'director', 'ConceptVar': 'The Dark Knight'}, {'RelationVar': 'capital', 'ConceptVar': 'China'}, {'RelationVar': 'president', 'ConceptVar': 'USA'}]

質問が誰または何を使用しているかどうかも取得する場合は、に変更(?:Who|What)します。(Who|What)

実際にデータを抽出して変数に代入するのは非常に簡単です。

>>> m = re.match(r, "What is the capital of China?")
>>> d = m.groupdict()
>>> relation_var = d["RelationVar"]
>>> concept_var = d["ConceptVar"]
>>> relation_var
'capital'
>>> concept_var
'China'
于 2013-05-21T00:28:26.967 に答える