句子分割和依赖解析器

时间:2017-07-06 12:18:11

标签: spacy

我是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一起使用?

感谢您的耐心和帮助:)

1 个答案:

答案 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

的文档 祝你好运!希望有所帮助。