陈词滥调匹配 - Spacy

时间:2018-01-23 00:43:09

标签: python regex nltk spacy

我尝试在pandas dataframe中保存一系列陈词滥调,并希望通过文本文件运行它并找到extact匹配项。是否可以使用spaCy?

熊猫中的样本列表。

Abandon ship
About face
Above board
All ears

示例句。

This is a sample sentence containing a cliche abandon ship. He was all ears for the problem.

预期产出:

abandon ship
all ears

它必须处理列表和句子之间的案例敏感性。

目前我正在使用这种方法来达到单字匹配。

Column compare and return values

pd.DataFrame([np.intersect1d(x,df1.WORD.values) for x in df2.values.T],index=df2.columns).T

1 个答案:

答案 0 :(得分:2)

您正在寻找Spacy的matcher,您可以阅读更多关于here的信息。它可以为您找到任意长/复杂的令牌序列,您可以轻松地对其进行并行化(请参阅 pipe()的匹配器文档)。它默认返回文本中匹配的位置,但您可以使用您已找到它们的标记执行任何操作,并且还可以添加on_match回调函数。

那就是说,我认为你的用例相当简单。我已经包含了一个让你入门的例子。

import spacy
from spacy.matcher import Matcher

nlp = spacy.load('en')

cliches = ['Abandon ship',
'About face',
'Above board',
'All ears']

cliche_patterns = [[{'LOWER':token.text.lower()} for token in nlp(cliche)] for cliche in cliches]

matcher = Matcher(nlp.vocab)
for counter, pattern in enumerate(cliche_patterns):
    matcher.add("Cliche "+str(counter), None, pattern)

example_1 = nlp("Turn about face!")
example_2 = nlp("We must abandon ship! It's the only way to stay above board.")

matches_1 = matcher(example_1)
matches_2 = matcher(example_2)

for match in matches_1:
    print(example_1[match[1]:match[2]])

print("--------")
for match in matches_2:
    print(example_2[match[1]:match[2]])

>>> about face
>>> --------
>>> abandon ship
>>> above board

请确保您拥有Spacy(2.0.0+)的最新版本,因为最近更改了匹配器API。