思考実験のビットとして、私はpyCyを使ってpyCyを使ってニュース記事の件名を見つけ出し、それを選んだ名詞に置き換えます。問題は、正確にはうまくいかず、改善できると思っていました。私はspaCyをよく理解していません。ドキュメントは理解するのが少し難しいです。spaCyを使用して文の「トピック」を置き換えます。
まず、コード:
doc=nlp(thetitle)
for text in doc:
#subject would be
if text.dep_ == "nsubj":
subject = text.orth_
#iobj for indirect object
if text.dep_ == "iobj":
indirect_object = text.orth_
#dobj for direct object
if text.dep_ == "dobj":
direct_object = text.orth_
try:
subject
except NameError:
if not thetitle: #if empty title
thetitle = "cat"
subject = "cat"
else: #if unknown subject
try: #do we have a direct object?
direct_object
except NameError:
try: #do we have an indirect object?
indirect_object
except NameError: #still no??
subject = random.choice(thetitle.split())
else:
subject = indirect_object
else:
subject = direct_object
else:
thecat = "cat" #do nothing here, everything went okay
newtitle = re.sub(r"\b%s\b" % subject, toreplace, thetitle)
if (newtitle == thetitle) : #if no replacement happened due to regex
newtitle = thetitle.replace(subject, toreplace)
return newtitle
「猫」の行は、何もしないフィラー線です。 "thetitle"は、私がRSSフィードから引き出しているランダムなニュース記事タイトルの変数です。 "toreplace"は、見つかったサブジェクトが何であっても文字列を置き換える変数です。
のは、例を使ってみましょう:
「テレビをアニメーション化するべきビデオゲーム番組 - 画面の暴言を」そして、ここではそのdisplaCyの内訳です:コードを変更することを決定したhttps://demos.explosion.ai/displacy/?text=Video%20Games%20that%20Should%20Be%20Animated%20TV%20Shows%20-%20Screen%20Rant&model=en&cpu=1&cph=1
単語がされてしまいました」それは、この文の名詞でもないが、対象、間接的な対象、または直接的な対象を見つけることができなかったため、ランダムな単語選択のフォールバックをもたらしたようだ。私の希望は、この例では「ビデオゲーム」のようなものを見つけることです。
最後のビットを外して(ニュース記事のソースであると思われる)、表示されていることに注意してください。https://demos.explosion.ai/displacy/?text=Video%20Games%20that%20Should%20Be%20Animated%20TV%20Shows&model=en&cpu=1&cph=1 "that"が問題であると思われます。
これを解析するにはどうすればよいでしょうか?最初に固有名詞を探すべきですか?
このtry/exceptブロックは非常にPythonicに見えません。何も問題なく、Noneに初期化して確認しますか? –
あなたは文章の断片で良い結果を見ることはできません。あなたの例文には述語さえありません。 –
Re:try/exceptブロックこれは、私がSpaCyの使い方のために見つけたコード例を基にしています。述語が悪くないでしょうか? SpaCyを使用するよりも文章断片のトピックを見つける良い方法はありますか? – SpaceMouse