**部分
# -*- coding: utf-8 -*-
# import codecs
import jieba.posseg as pseg
from gensim import corpora, models, similarities
# from hotelmatcher.constant import *
class
tfidf
:""" tf-idf模型比較文字相似度類 """
# 停用詞
stop_words =
['酒店'
,'旅館'
]# 結巴分詞後的停用詞性
# [標點符號、連詞、助詞、副詞、介詞、時語素、『的』、數詞、方位詞、代詞]
stop_flag =
['x'
,'c'
,'u'
,'d'
,'p'
,'t'
,'uj'
,'m'
,'f'
,'r'
]def
__init__
(self)
:# self.ensure_stop_words()
pass
""" def ensure_stop_words(self):
# 停用詞
if self.stop_words is none:
stop_file = path_doc + 'stopwords.txt'
stop_words = codecs.open(stop_file, 'r', encoding='utf8').readlines()
self.stop_words = [w.strip() for w in stop_words]
"""deftext2words
(self, text:
str)
->
list
:""" 對一段文字分詞、去停用詞 """
result =
words = pseg.cut(text)
for word, flag in words:
if word not
in self.stop_words and flag not
in self.stop_flag:
return result
defsimilarity_compare
(self, compare_doc:
str, refer_doc:
list)-
>
tuple
:"""
比較相似度
:param compare_doc: 待比對的文件
:param refer_doc: 基準文件
:return: tuple
"""# 語料庫
refer_words =
placeholder_count =
0for refer_word in refer_doc:
words = self.text2words(refer_word)
if words:
else
:# 確保順序
placeholder_count +=
1'placeholder'
+str
(placeholder_count)))
# 建立語料庫詞袋模型
dictionary = corpora.dictionary(refer_words)
doc_vectors =
[dictionary.doc2bow(word)
for word in refer_words]
# 建立語料庫 tf-idf 模型
tf_idf = models.tfidfmodel(doc_vectors)
tf_idf_vectors = tf_idf[doc_vectors]
compare_vectors = dictionary.doc2bow(self.text2words(compare_doc)
) index = similarities.matrixsimilarity(tf_idf_vectors, num_features=
len(dictionary)
) sims = index[compare_vectors]
# 對結果按相似度由高到低排序
sims =
sorted
(list
(enumerate
(sims)
), key=
lambda x: x[1]
, reverse=
true
)"""
index = similarities.matrixsimilarity(tf_idf_vectors, num_features=len(dictionary), num_best=1)
# 對結果按相似度由高到低排序
sims = index[compare_vectors]
"""return sims[0]
if __name__ ==
'__main__'
: tfidf = tfidf(
) test =
'月亮海灘旅館'
refers =
titles =
list
(refers.keys())
similarity = tfidf.similarity_compare(test, titles)
msg =
"測試酒店 '%s' 和參照酒店中的 '%s' 最相似,相似度為 %f,對應酒店id為:%s" \
%(test, titles[similarity[0]
], similarity[1]
, refers[titles[similarity[0]
]][0
][0]
)print
(msg)
結果展示
文字比較演算法的實現
這段時間很忙,呵呵,沒時間寫blog。前兩天看了乙個文字比較的演算法,演算法的思路我就不多說了,主要說下我的實現。演算法參考 文字比較演算法剖析 1 如何確定最大匹配率 文字比較演算法剖析 2 如何確定最優匹配路徑 我的實現步驟是 1 計算出所有可行的路徑 如下圖中,n l,r 所在的位置如果該位置...
Linux文字比較命令 diff
diff 命令 diff 命令是 linux上非常重要的工具,用於比較檔案的內容,特別是比較兩個版本不同的檔案以找到改動的地方。diff在命令列中列印每乙個行的改動。最新版本的diff還支援二進位制檔案。diff程式的輸出被稱為補丁 patch 因為linux系統中還有乙個patch程式,可以根據d...
Linux文字比較命令 diff
diff 命令 diff 命令是 linux上非常重要的工具,用於比較檔案的內容,特別是比較兩個版本不同的檔案以找到改動的地方。diff在命令列中列印每乙個行的改動。最新版本的diff還支援二進位制檔案。diff程式的輸出被稱為補丁 patch 因為linux系統中還有乙個patch程式,可以根據d...