python比較字符串相似度,原創度檢測工具


我平時寫文章喜歡借鑒一些別人的內容,但是這樣百度收錄不好,所以都用小發貓偽原創一遍,但是現在很多人的文章也是小發貓偽原創的,怎么辦?所以我開發了一個原創度檢測工具,源碼在下面,通過百度搜索,獲取檢測數據源,然后通過人工智能技術計算內容相似度,最后綜合統計文章的原創度。原創性測試結果的准確率可以達到80%,但不能做到100%准確。原創性測試結果僅供參考。原創性測試結果在60%以上,適合發表。建議使用原創度在60%以下的文章。原創測試結果僅供參考,不代表原創測試結果高,文章收錄效果好。

# -*- coding: utf-8 -*-
"""
基於gensim模塊的中文句子相似度計算

思路如下:
1.文本預處理:中文分詞,去除停用詞
2.計算詞頻
3.創建字典(單詞與編號之間的映射)
4.將待比較的文檔轉換為向量(詞袋表示方法)
5.建立語料庫
6.初始化模型
7.創建索引
8.相似度計算並返回相似度最大的文本
"""


from gensim import corpora, models, similarities
import logging
from collections import defaultdict
import jieba


# 設置日志
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)


# 准備數據:現有8條文本數據,將8條文本數據放入到list中
documents = ["1)鍵盤是用於操作設備運行的一種指令和數據輸入裝置,也指經過系統安排操作一台機器或設備的一組功能鍵(如打字機、電腦鍵盤)",
             "2)鼠標稱呼應該是“鼠標器”,英文名“Mouse”,鼠標的使用是為了使計算機的操作更加簡便快捷,來代替鍵盤那繁瑣的指令。",
             "3)中央處理器(CPU,Central Processing Unit)是一塊超大規模的集成電路,是一台計算機的運算核心(Core)和控制核心( Control Unit)。",
             "4)硬盤是電腦主要的存儲媒介之一,由一個或者多個鋁制或者玻璃制的碟片組成。碟片外覆蓋有鐵磁性材料。",
             "5)內存(Memory)也被稱為內存儲器,其作用是用於暫時存放CPU中的運算數據,以及與硬盤等外部存儲器交換的數據。",
             "6)顯示器(display)通常也被稱為監視器。顯示器是屬於電腦的I/O設備,即輸入輸出設備。它是一種將一定的電子文件通過特定的傳輸設備顯示到屏幕上再反射到人眼的顯示工具。",
             "7)顯卡(Video card,Graphics card)全稱顯示接口卡,又稱顯示適配器,是計算機最基本配置、最重要的配件之一。",
             "8)cache高速緩沖存儲器一種特殊的存儲器子系統,其中復制了頻繁使用的數據以利於快速訪問。"]
# 待比較的文檔
new_doc = "內存又稱主存,是CPU能直接尋址的存儲空間,由半導體器件制成。"


# 1.文本預處理:中文分詞,去除停用詞
print('1.文本預處理:中文分詞,去除停用詞')
# 獲取停用詞
stopwords = set()
file = open("stopwords.txt", 'r', encoding='UTF-8')
for line in file:
    stopwords.add(line.strip())
file.close()

# 將分詞、去停用詞后的文本數據存儲在list類型的texts中
texts = []
for line in documents:
    words = ' '.join(jieba.cut(line)).split(' ')    # 利用jieba工具進行中文分詞
    text = []
    # 過濾停用詞,只保留不屬於停用詞的詞語
    for word in words:
        if word not in stopwords:
            text.append(word)
    texts.append(text)
for line in texts:
    print(line)

# 待比較的文檔也進行預處理(同上)
words = ' '.join(jieba.cut(new_doc)).split(' ')
new_text = []
for word in words:
    if word not in stopwords:
        new_text.append(word)
print(new_text)

# 2.計算詞頻
print('2.計算詞頻')
frequency = defaultdict(int)  # 構建一個字典對象
# 遍歷分詞后的結果集,計算每個詞出現的頻率
for text in texts:
    for word in text:
        frequency[word] += 1
# 選擇頻率大於1的詞(根據實際需求確定)
texts = [[word for word in text if frequency[word] > 1] for text in texts]
for line in texts:
    print(line)


# 3.創建字典(單詞與編號之間的映射)
print('3.創建字典(單詞與編號之間的映射)')
dictionary = corpora.Dictionary(texts)
print(dictionary)
# 打印字典,key為單詞,value為單詞的編號
print(dictionary.token2id)


# 4.將待比較的文檔轉換為向量(詞袋表示方法)
print('4.將待比較的文檔轉換為向量(詞袋表示方法)')
# 使用doc2bow方法對每個不同單詞的詞頻進行了統計,並將單詞轉換為其編號,然后以稀疏向量的形式返回結果
new_vec = dictionary.doc2bow(new_text)
print(new_vec)


# 5.建立語料庫
print('5.建立語料庫')
# 將每一篇文檔轉換為向量
corpus = [dictionary.doc2bow(text) for text in texts]
print(corpus)


# 6.初始化模型
print('6.初始化模型')
# 初始化一個tfidf模型,可以用它來轉換向量(詞袋整數計數),表示方法為新的表示方法(Tfidf 實數權重)
tfidf = models.TfidfModel(corpus)
# 將整個語料庫轉為tfidf表示方法
corpus_tfidf = tfidf[corpus]
for doc in corpus_tfidf:
    print(doc)


# 7.創建索引
print('7.創建索引')
# 使用上一步得到的帶有tfidf值的語料庫建立索引
index = similarities.MatrixSimilarity(corpus_tfidf)


# 8.相似度計算並返回相似度最大的文本
print('# 8.相似度計算並返回相似度最大的文本')
new_vec_tfidf = tfidf[new_vec]  # 將待比較文檔轉換為tfidf表示方法
print(new_vec_tfidf)
# 計算要比較的文檔與語料庫中每篇文檔的相似度
sims = index[new_vec_tfidf]
print(sims)
sims_list = sims.tolist()
# print(sims_list.index(max(sims_list)))  # 返回最大值
print("最相似的文本為:", documents[sims_list.index(max(sims_list))])   # 返回相似度最大的文本


if __name__ == "__main__":
    pass

我的其他文章:

小發貓AI寫作 could not resolve host 3360:Name or service not known 錯誤解決

overwrite.cli.url nextcloud使用筆記

神經網絡的優點和缺點,python神經網絡實例

人工智能神經網絡算法(2020版)

神經網絡分類四種模型,如何選擇神經網絡模型


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM