[英]NLP and spaCy: How to find a similar phrase in a string
提前感谢您的阅读。
我在 Python 中并使用 spaCy 来处理英文文本。 我有一个要搜索的短语
search_phrase = "payment date"
在更大的短语中
text_to_be_searched = "Party A will pay Party B on the transaction date."
我希望搜索根据相似性将“付款日期”与“交易日期”相匹配。
我怎样才能做到这一点? 我没有看到明显的方法,我唯一能想到的就是手动将text_to_be_searched
拆分为块。 这里的一个额外困难是匹配的短语可能具有不同数量的标记,因此我必须将其分成 1、2、... 5 个标记的块并在每组块中搜索每个块。 为了清楚起见,这将是:
一组 1-token 块:
['Party','A','will', ..., 'date']
一组 2-token 块:
['Party A','A will','will pay', ..., 'transaction date']
ETC
您可以获取词嵌入,然后找到它们之间的相似性。 spacy
能够做到这一点如下。 根据文档,默认情况下,它是余弦相似度。 当然,您需要找到一个最佳threshold
值。
nlp = spacy.load("en_core_web_md")
search = nlp("payment date")
text_to_be_searched = nlp("Party A will pay Party B on the transaction date.")
threshold = 0.8
matched_words = []
for token in text_to_be_searched:
print(token, token.similarity(search))
if token.similarity(search) > threshold:
matched_words.append(token)
print(f"\nMatched words: {matched_words}")
这打印
Party 0.34560599567510353
A 0.2068122164970917
will 0.7228409255656658
pay 0.7228409255656658
Party 0.34560599567510353
B 0.11308183304731666
on 0.20214880588221648
the 0.324707772449963
transaction 0.9999999409847675
date 0.9999999409847675
. 0.2766332837661776
Matched words: [transaction, date]
要使用en_core_web_md
,首先您需要按如下方式下载它
python3 -m spacy download en_core_web_md
要获得词嵌入,您可以使用不同的东西,例如BERT
等语言模型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.