2
我試圖在10個左右文檔的集合中構建一個類似句子的列表。我在Python中使用FuzzyWuzzy庫來確定相似性,儘管我目前的算法可行,但它效率不高,需要永遠運行。高效模糊地匹配文檔集合中的每個句子
for doc in docs:
for sentence in doc.sentences:
if len(sentence) > 8:
for document in docs:
if similarity(document,doc)["ratio"] < 100:
for sentn in document.sentences:
if len(sentn) > 8:
simil = similarity(sentence,sentn)
if simil["ratio"] > 60:
count+=1
print count
pairs.append([sentence,sentn,simil])
如果你不喜歡閱讀的代碼一塌糊塗,它需要在列表中的每個文件,然後在它的每個句子迭代,那麼它需要的那句話和它比較,所有其他句子所有其他文件,這意味着它正在處理數十億種可能的組合,其中許多相似度低於5%,這非常低效且浪費處理能力,是否有更高效的算法或處理文檔的方式?
編輯:
在斯塔克斯建議我加入這行代碼
if abs(len(sentence)-len(sentn))<10:
simil = similarity(sentence,sentn)
...
有顯着的性能提升,但我還是不禁覺得算法是低效
注意:這不是一個重複的問題,另一個問題是如何弄清楚兩個句子是否相似,我已經可以做到這一點,我需要知道的是如何有效地做到這一點,很多次
你需要一些指標來衡量s並且只比較在一定範圍內具有度量的句子。可能是「最大字長」或「x的總數」,但應基於某些對您正在進行的比較類型有意義的特徵。 – stark
@stark我不完全清楚你在說什麼,你的意思是我應該在運行'smiliarity()'之前檢查每個語句是否符合標準?像檢查以確保句子的長度相似? –
[如何計算餘弦相似度給出2個句子字符串? - Python](http://stackoverflow.com/questions/15173225/how-to-calculate-cosine-similarity-given-2-sentence-strings-python) –