陈词滥调匹配 - Spacy
Cliche matching - Spacy
我尝试在 pandas 数据框中保存陈词滥调列表,并希望通过文本文件 运行 它并找到完全匹配。可以使用 spaCy 吗?
示例列表保存在 pandas。
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
它必须处理列表和句子之间的区分大小写。
目前我正在使用这种方法来进行单词匹配。
pd.DataFrame([np.intersect1d(x,df1.WORD.values) for x in df2.values.T],index=df2.columns).T
您正在寻找 Spacy 的 matcher, which you can read more about here。它可以为您找到任意 long/complicated 个标记序列,并且您可以轻松地将其并行化(请参阅 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 最近发生了变化。
我尝试在 pandas 数据框中保存陈词滥调列表,并希望通过文本文件 运行 它并找到完全匹配。可以使用 spaCy 吗?
示例列表保存在 pandas。
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
它必须处理列表和句子之间的区分大小写。
目前我正在使用这种方法来进行单词匹配。
pd.DataFrame([np.intersect1d(x,df1.WORD.values) for x in df2.values.T],index=df2.columns).T
您正在寻找 Spacy 的 matcher, which you can read more about here。它可以为您找到任意 long/complicated 个标记序列,并且您可以轻松地将其并行化(请参阅 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 最近发生了变化。