我是python(使用python 3)和spacy(以及编程)的新手。请耐心等待。
我有三个问题,其中两个或多或少相同,我无法让它工作。 我采用了“spacy语法特定搜索”(example)并试图让不同的东西起作用。
我的程序目前读取txt和正常提取
if w.lower_ != 'music':
return False
的工作原理。
我的第一个问题是:如何让spacy提取两个单词? 例如:“古典音乐” 通过前面提到的片段,我可以将它提取为古典音乐或音乐。但如果我只搜索其中一个词,我也会得到结果,我不想要。
古典 - 时代/时代
或者当我只寻找音乐时
音乐 - 巴洛克风格,现代
第二个问题是:如何让依赖项工作?
示例依赖项:
elif w.dep_ != 'nsubj': # Is it the subject of a verb?
return False
工作正常。但是我尝试过的其他一切都不起作用。
例如,我想提取带有“birthday”和依赖词“DATE”的句子。 (所以依赖是一个实体)
我得到了
if d.ent_type_ != ‘DATE’:
return False
工作。
所以现在它看起来像:
def extract_information(w,d):
if w.lower_ != ‘birthday’:
return False
elif d.ent_type_ != ‘DATE’:
return False
else:
return True
这样的事情是否有效?
如果它有效,第三个问题就是如何用DATE过滤句子。因此,如果句子包含某个单词而DATE将其排除。
最后一件事可能是,我在某处读到了依赖关系基于“斯坦福类型依赖关系手册”。是否有一个列表中哪些依赖项与spacy一起使用?
感谢您的耐心和帮助:)
答案 0 :(得分:0)
在我为您的问题提出一些简单的建议之前,您是否尝试过对某些句子使用displaCy visualiser?
使用例句'约翰的生日是昨天,你会发现在解析的句子中,生日和昨天不一定是彼此的直接依赖关系。因此,基于具有DATE类型实体依赖性的生日词进行搜索可能不会产生最佳结果。
在第一个问题上: 蛮力方法是在解析句子后寻找匹配的后续单词。
doc = nlp(u'Mary enjoys classical music.')
for (i,token) in enumerate(doc):
if (token.lower_ == 'classical') and (i != len(doc)-1):
if doc[i+1].lower_ == 'music':
print 'Target Acquired!'
如果您不确定枚举的作用,请查阅。它是使用python的pythonic方式。
对于问题2和问题3,解决这个问题的一种简单(但不是优雅)的方法是在解析的句子中识别出生日'生日'存在,如果它包含类型'日期'。
的实体doc = nlp(u'John\'s birthday was yesterday.')
for token in doc:
if token.lower_ == 'birthday':
for entities in doc.ents:
if entities.label_ == 'DATE':
print 'Found ya!'
对于依赖项列表,我假设您指的是词性标记。查看有关此page。
的文档 祝你好运!希望有所帮助。