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


提前感谢您的阅读。

我在Python和使用空间处理英文文本。我想搜索一个短语

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']

您可以获得单词嵌入,然后找到它们之间的相似性。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等。

相关内容

  • 没有找到相关文章

最新更新