我在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
等。