繁体   English   中英

NLP 和 spaCy:如何在字符串中找到相似的短语

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM