首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Textacy pos_regex_matches vs matches

Python Textacy pos_regex_matches vs matches
EN

Stack Overflow用户
提问于 2020-02-10 23:22:27
回答 2查看 867关注 0票数 1

我正在尝试用python在句子中寻找动词来解决NLP问题。我在stackoverflow上找到了一个旧的答案,它适用于不推荐使用的pos_regex_matches。使用新的matches函数时,我遇到了一个非常无聊的问题。新函数返回任何匹配,而不仅仅是最长的匹配(这是pos_regex_matches所做的)。

代码语言:javascript
复制
pattern = r'<VERB>*<ADV>*<VERB>+<PART>*'
verb_pattern = [{"POS": "VERB", "OP": "*"},{"POS": "ADV", "OP": "*"},{"POS": "VERB", "OP": "+"},{"POS": "PART", "OP": "*"}]

t_list_1 = textacy.extract.pos_regex_matches(text, pattern)
t_list_2 = textacy.extract.matches(text, verb_pattern)

正如您所看到的,模式是相同的,但是matches函数的模式是新的格式。例如,旧的pos_regex_matches返回was celebrating,而新的匹配同时返回waswas celebrating。是否有人遇到过同样的问题?是模式问题还是文本问题?

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2020-05-29 20:29:36

我也遇到过同样的问题。一个快速的解决方案可能是spacy实用程序的filter_spans

具体地说,我在下面发布了一个尝试修复你的例子。

代码语言:javascript
复制
from spacy.util import filter_spans

t_list_2 = filter_spans(t_list_2)

我希望它能对你有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2020-04-01 21:03:17

我也有同样的问题。虽然我还没有找到一个标志来启用表达式的贪婪匹配,以返回最长的匹配项,而不是子部分,但我已经编写了这段代码来手动删除非最大匹配项。

代码语言:javascript
复制
pattern = r'<VERB>*<ADV>*<VERB>+<PART>*'
verb_pattern = [{"POS": "VERB", "OP": "*"},{"POS": "ADV", "OP": "*"},{"POS": 
"VERB", "OP": "+"},{"POS": "PART", "OP": "*"}]

t_list_1 = textacy.extract.pos_regex_matches(text, pattern)
t_list_2 = textacy.extract.matches(text, verb_pattern)

# take the longest when overlapping
for i, el_i in enumerate(t_list_2):
    for j in range(i):
        el_j = t_list_2[j]
        if not el_j:
            continue
        if el_j.start <= el_i.start and el_j.end >= el_i.end:
            # el_i inside el_j
            t_list_2[i] = None
            break
        elif el_i.start <= el_j.start and el_i.end >= el_j.end:
            # el_j inside el_i
            t_list_2[j] = None
        elif el_i.end > el_j.start and el_i.start < el_j.end:
            raise ValueError('partial overlap?')
t_list_2 = [el for el in t_list_2 if el]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60153410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档