中文標題相似度檢測

来源:https://www.cnblogs.com/zh-jp/archive/2023/02/16/17128539.html
-Advertisement-
Play Games

前言 對中文標題使用餘弦相似度演算法和編輯距離相似度分析進行相似度分析。 準備數據集part1 本次使用的數據集來源於前幾年的碩士學位論文,可根據實際需要更換。結構如下所示: 學位論文題名 基於捲積神經網路的人臉識別研究 P2P流媒體視頻點播系統設計和研究 校園網安全體系的設計與實現 無線感測器網路中 ...


前言

對中文標題使用餘弦相似度演算法編輯距離相似度分析進行相似度分析。

準備數據集part1

本次使用的數據集來源於前幾年的碩士學位論文,可根據實際需要更換。結構如下所示:

學位論文題名
基於捲積神經網路的人臉識別研究
P2P流媒體視頻點播系統設計和研究
校園網安全體系的設計與實現
無線感測器網路中基於多中繼切換的CARQ方案性能分析
RFID和VLPR技術在酒鋼智能門禁系統中的應用

...

基於MapReduce的Web鏈接結構分析演算法研究
環形交叉口混合交通流元胞自動機模型研究
細菌覓食演算法的優化及其在車間調度中的應用研究
基於多載體圖像的通用隱寫分析方法研究
基於加權網路的傳染病免疫策略研究

文件名:data.csv

編碼格式:UTF-8

import pandas as pd
data = pd.read_csv('data.csv')
data = data['學位論文題名']

準備數據集part2

分詞是一種常用的文本預處理技術,它可以為後續的文本分析和處理提供便利。例如,對於文本分類任務,可以使用分詞將文本轉換為詞的序列,然後訓練分類器來對詞的序列進行分類。

在進行分詞時,通常會去掉一些無意義的詞,稱為停詞。停詞是指那些對文本分析沒有太多意義的詞,例如,冠詞、連詞、介詞等。去除停詞可以提高分詞的準確性,並使文本分析的結果更加清晰明瞭。
停詞文本集結構如下所示,停詞庫根據文件名在網上很容易找到:

$
0
1
2
3
4

...

順
順著
首先
!
,
:
;
?

文件名:cn_stopwords.txt

編碼格式:UTF-8

with open('cn_stopwords.txt', 'r', encoding='utf-8') as f: 
    stop_words = [word.strip() for word in f.readlines()]
  • 執行分詞和去停詞
import jieba
res = []
for i in data:
    ii = i
    wordCut = list(jieba.cut(ii))
    for j in wordCut:
        if j in stop_words:
            wordCut.remove(j)
    res.append(wordCut)
  • 保存結果
import pickle
with open('word_cut.dat', mode='wb') as f:
    pickle.dump(res, f)

這裡使用pickle保存,是因為如果使用pandas,保存的數據是帶了雙引號的(代表字元串),後續處理不便,因此採用序列化存儲。

餘弦相似度演算法

餘弦相似度演算法是一種計算兩個向量之間相似度的方法,常用於自然語言處理和推薦系統等領域。

餘弦相似度演算法的基本思想:計算兩個向量的夾角餘弦值,作為它們的相似度。兩個向量的夾角餘弦值越接近1,它們的相似度就越高;反之,如果兩個向量的夾角餘弦值接近0,它們的相似度就越低。

載入數據

with open('word_cut.dat', mode='rb') as f:
    dwc = pickle.load(f) # dwc 意為 Data of Word Cut

使用Word2Vec模型生成單詞向量

在Word2Vec模型中,單詞被表示為一個向量,並且這些向量是通過學習單詞在上下文中的出現概率而生成的。skip-gram和CBOW是用於訓練Word2Vec模型的兩種不同的演算法,它們都可以用來生成單詞向量。

在使用Word2Vec模型進行自然語言處理任務時,可以使用餘弦相似度演算法來計算單詞向量之間的相似度。例如,可以使用餘弦相似度演算法來尋找與給定單詞最相似的其他單詞,或者用來比較兩個文本之間的相似度。

需要註意的是,Word2Vec模型和餘弦相似度演算法在不同的級別上操作。Word2Vec模型生成單詞向量,而餘弦相似度演算法用於比較單詞向量之間的相似度。因此,它們通常被結合使用來解決自然語言處理任務。

from gensim.models import Word2Vec
model = Word2Vec(dwc, sg=1, vector_size=100, window=5, min_count=1, negative=3, sample=0.001, hs=1,
                         workers=4)

Word2Vec模型有著眾多參數,這裡僅介紹用到的一部分,詳情見官方文檔

參數名 描述
sg {0, 1}, 可選 訓練演算法:1為skip-gram;否則為CBOW
vector_size int, 可選 單詞向量的維數
windows int, 可選 句中當前單詞和預測單詞之間最大距離
min_count int, 可選 忽略總頻率低於此值的所有單詞
negative int, 可選 如果>0,將使用負採樣,負的int指定應繪製多少個“雜訊詞”(通常在5-20之間)。如果設置為0,則不使用負採樣
sample float, 可選 用於配置被隨機採樣的高頻詞,有效範圍:(0,1e-5)
hs {0, 1}, 可選 如果為1,則分層softmax將用於模型訓練。如果0,且負值為非零,則將使用負採樣
workers int, 可選 使用這些工作線程來訓練模型(相當於多核機器的更快訓練)。

保存/載入訓練結果

model.save('model.dat')             # 保存模型
model = Word2Vec.load('model.dat')  # 載入模型

計算相似度

limit = 0.99    # 相似度閾值
k = len(dwc)
st = [] # 意為Similar Title
for i in range(k):
    for j in range(i + 1, k):
        sim = model.wv.n_similarity(dwc[i], dwc[j])  # 計算兩個標題間的相似度
        if sim > limit:     # 相似度高於閾值的加入結果
            temp = [dwc[i], dwc[j], sim]
            st.append(temp)
for i in st:
    print(i)

部分結果如下:

['捲積,神經網路,人臉識別,研究', '雙目,測距,機器人,研究', 0.99172336]
['P2P,流媒體,視頻點播,系統,設計,研究', '部隊,數字化,營區,設計,實現', 0.9933342]
['P2P,流媒體,視頻點播,系統,設計,研究', '屬性,環,簽密,NDN,敏感,信息,保護,方案', 0.99131924]
['P2P,流媒體,視頻點播,系統,設計,研究', '社交,關係,流行病,傳播,免疫,機制,研究', 0.9944775]
['P2P,流媒體,視頻點播,系統,設計,研究', 'WSN,節能型,數據壓縮,方法,研究', 0.99563485]

編輯距離相似度演算法

演算法介紹
編輯距離相似度演算法是一種計算兩個字元串之間相似度的方法,常用於自然語言處理和信息檢索等領域。

編輯距離相似度演算法的基本思想是,計算兩個字元串之間的最小編輯次數,作為它們的相似度。兩個字元串之間的最小編輯次數越少,它們的相似度就越高;反之,如果兩個字元串之間的最小編輯次數越多,它們的相似度就越低。

import Levenshtein
limit2 = 5     # 相似度閾值
k = len(dwc)
st2 = dict()
for i in range(k):
    for j in range(i + 1, k):
        title1 = ''.join(dwc[i])
        title2 = ''.join(dwc[j])
        sim = Levenshtein.distance(title1, title2)
        if sim < limit2:    # 相似度低於閾值的加入結果
            key = title1 + ' ' + title2
            st2[key] = sim
sim_rk = sorted(st2.items(), key=lambda x: x[1])   # 根據相似度增序排序
for i in sim_rk:
    print(i)

結果如下:

('稀疏,表示,目標,跟蹤,演算法,研究 稀疏,表示,目標,跟蹤,演算法,研究', 0)
('稀疏,表示,目標,跟蹤,演算法,研究 稀疏,表示,目標,跟蹤,方法,研究', 1)
('稀疏,表示,目標,跟蹤,方法,研究 稀疏,表示,目標,跟蹤,演算法,研究', 1)
('自,適應,有限元,方法,三維,相場,模型模擬,研究 自,適應,有限元,方法,相場,模型模擬,研究', 3)
('多,特征,融合,粒子,濾波,跟蹤,演算法,研究 特征,適應,融合,粒子,濾波,跟蹤,演算法,研究', 4)
('模糊,軟集,多,屬性,決策,方法,研究 軟集,理論,多,屬性,決策,方法,研究', 4)

總結

在Python中,使用這兩種演算法能夠簡單實現文本分析。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一 發新版本導致 問題的根源是伺服器js文件更新了,頁面還在請求以前的js文件。可以保留之前webpack打包的文件,但是時間久了文件體積會積累到很大,而且從產品角度更希望用戶訪問新的資源。所以最好的解決方式是在報錯時給用戶提示,用戶點擊確認後刷新頁面。前端如何能catch到這種錯誤? 目前還沒找到 ...
  • 直接上重點。 如果是定位不准,Web瀏覽器端, 1,要使用者必須要做個人認證或者企業認證,且通過審核。 2,請求的網頁必須是https協議。 3,請求的功能變數名稱必須是加入到應用的Referer白名單。進入到應用設置里查看。 4,申請的應用類型必須是瀏覽器端。且必須勾選對應的服務。 有時申請地圖服務的人和 ...
  • 談到java中的併發,我們就避不開線程之間的同步和協作問題,談到線程同步和協作我們就不能不談談jdk中提供的AbstractQueuedSynchronizer(翻譯過來就是抽象的隊列同步器)機制; (一)、AQS中的state和Node含義: AQS中提供了一個int volatile state ...
  • 組件設計是通過對功能及視覺表達中元素的拆解、歸納、重組,並基於可被覆用的目的,形成規範化的組件,通過多維度組合來構建整個設計方案,將這些組件整理在一起,便形成組件庫。本文我們主要講述基於Vant CLI的自建組件庫。Vant CLI 是一個基於 Vite 實現的 Vue 組件庫構建工具,通過 Van... ...
  • 進位之間的轉換 1.1 電腦硬體的基本認知 cpu: 中央處理器. 相當於人的大腦.運算中心,控制中心. 記憶體: 臨時存儲數據. 優點:讀取速度快。 缺點:容量小,造價高,斷電即消失. 硬碟: 長期存儲數據. 優點:容量大,造價相對低,斷電不消失。 缺點:讀取速度慢. 操作系統:統一管理電腦軟硬 ...
  • 前言 在app中經常會有發送公告的需求,告知用戶一些重大的事情。本文將使用FA重置版和qq收藏的筆記功能完成遠程公告的功能。 遠程公告的思路 在qq收藏新建筆記,設置好公告內容 分享筆記給好友,拿到外部鏈接地址 FA發送http請求,解析出公告內容 在qq收藏新建筆記,設置好公告內容 點擊頭像,在點 ...
  • JOSN處理和HttpMessageConverter 1.JSON處理-@ResponseBody 說明:在實際開發中,我們往往需要伺服器返回的數據都是 JSON 格式。 SpringMVC 提供了 @ResponseBody 註解,用來標註 Controller 方法的返回的格式為 JSON,將 ...
  • 時間輪工作原理解析 一.時間輪介紹 1.時間輪的簡單介紹 時間輪(TimeWheel)作為一種高效率的計時器實現方案,在1987年發表的論文Hashed and Hierarchical Timing Wheels中被首次提出。 其被髮明的主要目的在於解決當時操作系統的計時器功能實現中,維護一個定時 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...