Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Spacy NLP-正则表达式分块_Python_Nlp_Part Of Speech_Spacy - Fatal编程技术网

Python Spacy NLP-正则表达式分块

Python Spacy NLP-正则表达式分块,python,nlp,part-of-speech,spacy,Python,Nlp,Part Of Speech,Spacy,Spacy包括检索一组名词短语的noun_chunks功能。 函数english\u noun\u chunks(见下文)使用word.pos==noun def english_noun_chunks(doc): labels = ['nsubj', 'dobj', 'nsubjpass', 'pcomp', 'pobj', 'attr', 'root'] np_deps = [doc.vocab.strings[label] for label i

Spacy包括检索一组名词短语的
noun_chunks
功能。 函数
english\u noun\u chunks
(见下文)使用
word.pos==noun

def english_noun_chunks(doc):
    labels = ['nsubj', 'dobj', 'nsubjpass', 'pcomp', 'pobj',
              'attr', 'root']
    np_deps = [doc.vocab.strings[label] for label in labels]
    conj = doc.vocab.strings['conj']
    np_label = doc.vocab.strings['NP']
    for i in range(len(doc)):
        word = doc[i]
        if word.pos == NOUN and word.dep in np_deps:
            yield word.left_edge.i, word.i+1, np_label
        elif word.pos == NOUN and word.dep == conj:
            head = word.head
            while head.dep == conj and head.head.i < head.i:
                head = head.head
            # If the head is an NP, and we're coordinated to it, we're an NP
            if head.dep in np_deps:
                yield word.left_edge.i, word.i+1, np_label
def英语名词块(doc):
标签=['nsubj'、'dobj'、'nsubjpass'、'pcomp'、'pobj',
'attr','root']
np_deps=[doc.vocab.strings[label]表示标签中的标签]
conj=doc.vocab.strings['conj']
np_label=doc.vocab.strings['np']
对于范围内的i(len(doc)):
word=doc[i]
如果np_deps中的word.pos==名词和word.dep:
屈服字。左_边。i,字。i+1,np_标签
elif word.pos==名词和word.dep==连词:
头
而head.dep==conj和head.head.i
我想从一个保持正则表达式的句子中获取块。例如,我用零个或多个形容词和一个或多个名词组成的短语

{(<JJ>)*(<NN | NNS | NNP>)+}
{()*()+}

是否可以不重写
英语\u名词\u块
函数

您可以在不损失任何性能的情况下重写此函数,因为它是用纯python实现的,但为什么不在获得这些块之后过滤它们呢

import re
import spacy

def filtered_chunks(doc, pattern):
  for chunk in doc.noun_chunks:
    signature = ''.join(['<%s>' % w.tag_ for w in chunk])
    if pattern.match(signature) is not None:
      yield chunk

nlp = spacy.load('en')
doc = nlp(u'Great work!')
pattern = re.compile(r'(<JJ>)*(<NN>|<NNS>|<NNP>)+')

print(list(filtered_chunks(doc, pattern)))
重新导入
进口空间
def过滤块(文档、模式):
对于doc.noun_块中的块:
签名=''.join([''%w.tag_u'表示块中的w])
如果pattern.match(签名)不是None:
屈服块
nlp=spacy.load('en')
doc=nlp(你干得好!)
pattern=re.compile(r'()*(| |)+'))
打印(列表(已过滤的_块(文档、模式)))

您可以在不损失任何性能的情况下重写此函数,因为它是在纯python中实现的,但为什么不在获得这些块之后过滤它们呢

import re
import spacy

def filtered_chunks(doc, pattern):
  for chunk in doc.noun_chunks:
    signature = ''.join(['<%s>' % w.tag_ for w in chunk])
    if pattern.match(signature) is not None:
      yield chunk

nlp = spacy.load('en')
doc = nlp(u'Great work!')
pattern = re.compile(r'(<JJ>)*(<NN>|<NNS>|<NNP>)+')

print(list(filtered_chunks(doc, pattern)))
重新导入
进口空间
def过滤块(文档、模式):
对于doc.noun_块中的块:
签名=''.join([''%w.tag_u'表示块中的w])
如果pattern.match(签名)不是None:
屈服块
nlp=spacy.load('en')
doc=nlp(你干得好!)
pattern=re.compile(r'()*(| |)+'))
打印(列表(已过滤的_块(文档、模式)))

Cython将此函数转换为C这一事实如何?你是对的,该文件具有
.pyx
扩展名,如果重写它,将失去一些性能。但是你需要重写它吗?或者你可以简单地过滤最终结果?那么这个函数被Cython翻译成C这个事实呢?你是对的,这个文件有
.pyx
扩展名,如果你重写它,你会失去一些性能。但是你需要重写它吗,或者你可以简单地过滤最终结果?