私は小さな文章で動作するプロジェクトに取り組んでいるので、ユーザーが長い文章または複雑な/複合文を渡す場合、それを単純な文章に解析してからソフトウェアに渡したいと考えています。
私はスペイシー法を試しましたが、接続詞でしか機能しません: 例: 私は市場に出て、本を買います。解析後: 市場に出ます。私は本を買います。(2 つの簡単な文に分割します)
しかし、次のようなより複雑な文で試したとき:
- 明日また店に来るときのために、このクーポンを保存しておく必要があります。(このクーポンは保存しておく必要があるので分割する必要があります。明日店に戻ってきました。
- ある意味で、毎日発生する犯罪事件の数を抑制しています。(ある意味で犯罪件数を抑えるために分割すべきです。毎日起こっています)
私が持っているコード:
import spacy
en = spacy.load('en_core_web_sm')
text = "In a way it curbs the number of crime cases happening every day."
doc = en(text)
seen = set() # keep track of covered words
chunks = []
for sent in doc.sents:
heads = [cc for cc in sent.root.children if cc.dep_ == 'conj']
for head in heads:
print(head.subtree)
words = [ww for ww in head.subtree]
for word in words:
seen.add(word)
chunk = (' '.join([ww.text for ww in words]))
chunks.append( (head.i, chunk) )
unseen = [ww for ww in sent if ww not in seen]
chunk = ' '.join([ww.text for ww in unseen])
chunks.append( (sent.root.i, chunk) )
chunks = sorted(chunks, key=lambda x: x[0])
for ii, chunk in chunks:
print(chunk)
それを簡単に行うためのライブラリ/フレームワークはありますか? または、誰かがスペイシーで文ツリーを生成して解析する方法を提案しているので、希望の場所でそれを壊すことができます。