この問題は非常に単純ですが、ここではかなり失われています。正規表現を使用して入力テキストの特定のセクションのみを抽出する方法はありますか?
入力テキスト:
「レス/ RBRすべてのINの1月2日/ CD/IN/DT米国/ NNP企業は/ NNSは/ VBP 唯一/ JJの事業主/ NNS /である/よりも?。 '
コード:
def get_words(pos_sent):
# Your code goes here
s = ""
x = re.findall(r"\b(\w*?)/\w*?\b", pos_sent)
for i in range(0, len(x)):
s = s + " " + x[i]
return s
def get_noun_phrase(pos_sent):
# Penn Tagset
# Adjetive can be JJ,JJR,JJS
# Noun can be NN,NNS,NNP,NNPS
t = get_words(pos_sent)
regex = r'((\S+\/DT)?(\S+\/JJ)*(\S+\/NN)*(\S+\/NN))'
return re.findall(regex, t)
最初の部分は、単に音声タグの一部を削除し、第二は、それを取ると、名詞句を見つけるためにそれを使用することになっています。
それが出力になっています:
[’all US businesses’, ’sole proprietorships’]
ではなく、それは空のリストを出力:
[]
さて、私はオリジナルのタグ付けされた文の中で取るためにそれを変更することができ、そして私が手:
を[('all/DT US/NN', 'all/DT ', '', '', 'US/NN'), ('businesses/NN', '', '', '', 'businesses/NN'), ('sole/JJ proprietorships/NN', '', 'sole/JJ ', '', 'proprietorships/NN')]
すべての正しいビットを持っていますが、それには他のものもたくさんあります。望んでいない。
私はまだ正規表現に新しいので、私はおそらく何か愚かな行方不明です。あなたの最初の関数の場合
regexが最良の方法であるかどうかは分かりませんが、間違っている可能性があります>。 – Adib
コードを正しくインデントする必要があります。必要に応じてヘルプ[here](https://stackoverflow.com/editing-help)があります。 – jDo
あなたが提供した1つの文だけを照合するのはかなり簡単ですが、パターンに合わない他のテキストを解析しようとすると分解します。例えば。 "すべて/ DT US/NNPのビジネス/ NNS"と一致させるには、\ S +/DT \ S +/NNP \ S +/NNS "'を書き、出力に 'replace'または' translate'を実行すると、完了しました。しかし、 "all/DT businesses/NNS"にもマッチしたいのですか?何かは、文字列をステップ実行して次の単語/タグが有効なノードであるかどうかを判断するために、トライまたはグラフと再帰が必要であることを示しています。はいの場合は、それを新しい開始ノードにして、繰り返し/再帰します。いいえの場合は、パス/文を返します。 – jDo