国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

NLP自然語言處理——關(guān)鍵詞提取之 TextRank 算法(五分鐘帶你深刻領(lǐng)悟TextRank算法的精髓)保姆級教程

這篇具有很好參考價值的文章主要介紹了NLP自然語言處理——關(guān)鍵詞提取之 TextRank 算法(五分鐘帶你深刻領(lǐng)悟TextRank算法的精髓)保姆級教程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

textrank關(guān)鍵詞提取,自然語言處理,人工智能,nlp

??博客主頁:是dream

??系列專欄:深度學(xué)習(xí)環(huán)境搭建、環(huán)境配置問題解決、自然語言處理、語音信號處理、項目開發(fā)

??每日語錄:你要做沖出的黑馬???而不是墜落的星星。

??感謝大家點(diǎn)贊??收藏?指正??

textrank關(guān)鍵詞提取,自然語言處理,人工智能,nlp

前言

????????關(guān)鍵詞提取是將文本中的關(guān)鍵信息、核心概念或重要主題抽取出來的過程。這些關(guān)鍵詞可以幫助人們快速理解文本的主題,構(gòu)建文本摘要,提高搜索引擎的效率,甚至用于文本分類和信息檢索等應(yīng)用領(lǐng)域。因此,關(guān)鍵詞提取在文本分析和自然語言處理中具有廣泛的應(yīng)用前景。本文主要包括以下幾個內(nèi)容:

  • ?自然語言文本預(yù)處理
  • ?TextRank算法詳解(三個維度:原理、流程圖、代碼)
  • ?好玩的中文關(guān)鍵詞詞云生成(解決亂碼問題)

??本博客將深入探討自然語言處理中常用的TextRank算法,以多種方式展現(xiàn)TextRank算法的核心思想。

準(zhǔn)備工作

  1. 本文的代碼是通過python實現(xiàn)的,建議安裝一個pycharm,非常方便!
  2. 停用詞表:https://pan.baidu.com/s/1OBy5piej31EuuAZbMEzVEw?pwd=peng
  3. 文本文檔:百度網(wǎng)盤 請輸入提取碼
  4. 庫函數(shù) jieba、sklearn、matplotlib以及生詞詞云用到的wordcloud
    ?

自然語言文本預(yù)處理

??一般情況下我們拿到的文本是不規(guī)范的,需要我們進(jìn)行一系列的預(yù)處理操作。????????

  • 文本數(shù)據(jù)清洗:去除特殊符號、HTML標(biāo)簽、數(shù)字等無關(guān)字符。
  • 分詞:將文本拆分成單詞或詞組。
  • 停用詞去除:排除常見的停用詞,如“的”、“在”等,以減少噪音。

停用詞提取

????????在前邊的準(zhǔn)備工作中,你已經(jīng)獲得了停用詞表,通過以下代碼提取停用詞。

# 獲取停用詞
def load_stopwords(stopwords_file):
    stopwords = set()
    with open(stopwords_file, 'r', encoding='utf-8') as f:
        for line in f:
            stopwords.add(line.strip())
    return stopwords

????????在這里提一嘴,在編程中,set 是一種數(shù)據(jù)結(jié)構(gòu),它類似于列表(list)或字符串(string),但具有一些不同的特點(diǎn)。

  • 列表(list)是一種有序的數(shù)據(jù)結(jié)構(gòu),可以包含多個元素,每個元素可以是不同類型的數(shù)據(jù)(例如數(shù)字、字符串、其他列表等)。列表中的元素可以重復(fù)。
  • 字符串(string)是一種有序的字符序列,通常用于表示文本。字符串的每個字符都有一個索引位置。
  • set 是一種無序的集合數(shù)據(jù)結(jié)構(gòu),它用于存儲不重復(fù)的元素。集合中的元素不按順序排列,并且每個元素在集合中只能出現(xiàn)一次。集合通常用于存儲一組唯一的值。

數(shù)據(jù)清洗

# 加載文檔集,對文檔集過濾詞性和停用詞
def filter_documents(data_path, stopwords):
    documents = []
    with open(data_path, 'r', encoding='utf-8') as f:
        for line in f:
            document = []
            words = pseg.cut(line.strip())
            for word, flag in words:
                if flag.startswith('n') and word not in stopwords and len(word) > 1:
                    document.append(word)
            documents.append(document)
    return documents

??????? 通過這一步,我們就得到一個包含精確分詞、詞性過濾和停用詞去除的文本數(shù)據(jù)。

????????預(yù)處理完成,接下來就是算法詳解和實現(xiàn)。

TextRank算法

????????算法思想:TextRank算法是一種用于文本摘要和關(guān)鍵詞提取的基于圖的算法,它借鑒了PageRank算法的思想,用于自動提取文本中重要的句子或關(guān)鍵詞。下面我將詳細(xì)講解TextRank算法的思想和工作原理。

1. 文本預(yù)處理

????????前邊我們已經(jīng)完成了文本預(yù)處理的工作。

2. 構(gòu)建圖

????????TextRank算法的核心思想是將文本表示為圖,其中句子或詞語是圖中的節(jié)點(diǎn),它們之間的關(guān)系是邊。構(gòu)建圖的過程包括以下步驟:

????????2.1. 節(jié)點(diǎn)表示

????????每個句子或詞語都被表示為圖中的一個節(jié)點(diǎn)。通常,可以使用詞向量(Word Embeddings)來表示詞語,這些詞向量可以通過預(yù)訓(xùn)練的詞嵌入模型(如Word2Vec或GloVe)獲取。對于句子,可以使用句向量來表示,通常是將句子中所有詞語的詞向量進(jìn)行平均或加權(quán)平均。

????????2.2. 邊的構(gòu)建

????????接下來,需要確定節(jié)點(diǎn)之間的關(guān)系,即邊。通常使用某種相似度度量來計算節(jié)點(diǎn)之間的相似性,例如余弦相似度。節(jié)點(diǎn)之間的相似度可以根據(jù)節(jié)點(diǎn)的詞向量或其他特征來計算。如果相似度超過一個預(yù)定的閾值,則在兩個節(jié)點(diǎn)之間建立一條邊。

3. 計算句子或詞語的重要性

????????一旦構(gòu)建了圖,就可以使用類似PageRank的算法來計算每個節(jié)點(diǎn)(句子或詞語)的重要性分?jǐn)?shù)。TextRank算法使用迭代的方式計算這些分?jǐn)?shù),直到收斂為止。以下是計算節(jié)點(diǎn)重要性的步驟:

????????3.1. 初始化分?jǐn)?shù)

????????為每個節(jié)點(diǎn)初始化一個初始重要性分?jǐn)?shù),通常可以設(shè)置為相等的值。

????????3.2. 迭代計算

????????重要性分?jǐn)?shù)的計算通過多輪迭代進(jìn)行,每一輪都根據(jù)與其相連接的節(jié)點(diǎn)的重要性來更新節(jié)點(diǎn)自身的重要性分?jǐn)?shù)。更新公式如下:

Score(A) = (1 - d) + d * Σ (Score(B) / OutDegree(B))
  • A 是當(dāng)前節(jié)點(diǎn)的重要性分?jǐn)?shù),需要更新的節(jié)點(diǎn)。
  • B 是與節(jié)點(diǎn) A 有邊相連的節(jié)點(diǎn)。
  • d 是阻尼因子(damping factor),通常取一個介于0和1之間的值,用于平衡迭代過程中的隨機(jī)瀏覽和節(jié)點(diǎn)之間的相互連接。
  • Score(B) 是節(jié)點(diǎn) B 的當(dāng)前重要性分?jǐn)?shù)。
  • OutDegree(B) 是節(jié)點(diǎn) B 的出度,表示與節(jié)點(diǎn) B 相連的邊的數(shù)量。

3.3. 收斂

????????迭代計算會一直進(jìn)行,直到重要性分?jǐn)?shù)收斂,即分?jǐn)?shù)的變化不再顯著。

4. 選擇重要的句子或詞語

????????一旦計算出每個節(jié)點(diǎn)的重要性分?jǐn)?shù),就可以根據(jù)這些分?jǐn)?shù)來選擇最重要的句子或詞語作為文本摘要或關(guān)鍵詞。通常,可以根據(jù)分?jǐn)?shù)排名來選擇前N個句子或詞語。

流程圖實現(xiàn)

textrank關(guān)鍵詞提取,自然語言處理,人工智能,nlp

代碼實現(xiàn)

# 使用TextRank提取關(guān)鍵詞
def extract_keywords_textrank(documents, top_n=10):
    top_keywords_per_document = []
    tr4w = TextRank4Keyword()
    for document in documents:
        text = ' '.join(document)
        tr4w.analyze(text=text, lower=True, window=2)
        keywords = tr4w.get_keywords(top_n, word_min_len=2)
        top_keywords_per_document.append([keyword.word for keyword in keywords])
    return top_keywords_per_document

詞云生成

? ? ? ? 為了使提取到的關(guān)鍵詞更加直觀,這里我們詞云的形式展現(xiàn)。首先需要確保你的環(huán)境已經(jīng)安裝了詞云可以通過以下命令安裝wordcloud。

????????有的同學(xué)在生成詞語的時候,會出現(xiàn)亂碼的問題,為了避免亂碼建議下載中文字體,這里我直接分享給大家。(提取碼:peng)百度網(wǎng)盤 請輸入提取碼 (baidu.com)

def generate_wordcloud(keywords, title):
    """
    生成詞云圖并顯示

    參數(shù):
    keywords (list): 包含關(guān)鍵詞的列表。
    title (str): 詞云圖的標(biāo)題。

    返回:
    None
    """
    # 將關(guān)鍵詞列表轉(zhuǎn)化為字符串
    keywords_str = ' '.join(keywords)

    # 指定中文字體文件路徑(根據(jù)實際情況替換為合適的路徑)
    font_path = r'D:\my_homework\NLP_homework\NLP_test1\SimHei.ttf'  # 替換為包含中文字符的字體文件路徑

    # 創(chuàng)建詞云對象并指定字體
    wordcloud = WordCloud(width=800, height=400, background_color='white', font_path=font_path).generate(keywords_str)

    # 顯示詞云圖
    plt.figure(figsize=(10, 5))
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis('off')
    plt.title(f'wordcloud - {title}')
    plt.show()

效果展示:

textrank關(guān)鍵詞提取,自然語言處理,人工智能,nlp

結(jié)語:

????????總的來說,TextRank算法是一種有效的自動化關(guān)鍵詞提取方法,它不需要依賴領(lǐng)域知識或語法規(guī)則,只需要基于文本本身的統(tǒng)計信息就能得到關(guān)鍵詞,因此在各種自然語言處理任務(wù)中都具有廣泛的應(yīng)用前景。文章來源地址http://www.zghlxwxcb.cn/news/detail-766489.html

本人目前正在學(xué)習(xí)自然語言處理(NLP)、語音信號識別、計算機(jī)視覺等相關(guān)知識,關(guān)注我,后續(xù),我將分享更多人工智能tips!最后附上整段代碼!

import jieba
import jieba.posseg as pseg
from sklearn.feature_extraction.text import TfidfVectorizer
from textrank4zh import TextRank4Keyword

import matplotlib.pyplot as plt
from wordcloud import WordCloud

# 獲取停用詞
def load_stopwords(stopwords_file):
    stopwords = set()
    with open(stopwords_file, 'r', encoding='utf-8') as f:
        for line in f:
            stopwords.add(line.strip())
    return stopwords

# 加載文檔集,對文檔集過濾詞性和停用詞
def filter_documents(data_path, stopwords):
    documents = []
    with open(data_path, 'r', encoding='utf-8') as f:
        for line in f:
            document = []
            words = pseg.cut(line.strip())
            for word, flag in words:
                if flag.startswith('n') and word not in stopwords and len(word) > 1:
                    document.append(word)
            documents.append(document)
    return documents

def generate_wordcloud(keywords, title):
    """
    生成詞云圖并顯示

    參數(shù):
    keywords (list): 包含關(guān)鍵詞的列表。
    title (str): 詞云圖的標(biāo)題。

    返回:
    None
    """
    # 將關(guān)鍵詞列表轉(zhuǎn)化為字符串
    keywords_str = ' '.join(keywords)

    # 指定中文字體文件路徑(根據(jù)實際情況替換為合適的路徑)
    font_path = r'D:\my_homework\NLP_homework\NLP_test1\SimHei.ttf'  # 替換為包含中文字符的字體文件路徑

    # 創(chuàng)建詞云對象并指定字體
    wordcloud = WordCloud(width=800, height=400, background_color='white', font_path=font_path).generate(keywords_str)

    # 顯示詞云圖
    plt.figure(figsize=(10, 5))
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis('off')
    plt.title(f'wordcloud - {title}')
    plt.show()

# 使用TextRank提取關(guān)鍵詞
def extract_keywords_textrank(documents, top_n=10):
    top_keywords_per_document = []
    tr4w = TextRank4Keyword()
    for document in documents:
        text = ' '.join(document)
        tr4w.analyze(text=text, lower=True, window=2)
        keywords = tr4w.get_keywords(top_n, word_min_len=2)
        top_keywords_per_document.append([keyword.word for keyword in keywords])
    return top_keywords_per_document

if __name__ == "__main__":
    stopwords_file = r'D:\my_homework\NLP_homework\NLP_test1\stopword.txt'  # 停用詞文件路徑
    data_path = r'D:\my_homework\NLP_homework\NLP_test1\corpus4keyword.txt'  # 文檔集文件路徑

    stopwords = load_stopwords(stopwords_file)
    documents = filter_documents(data_path, stopwords)

    print('停用詞表的大小為:', len(stopwords))
    print('文檔的數(shù)量為', len(documents))

   

    top_keywords1 = extract_keywords_textrank(documents)

    # 打印每個文檔的前10個關(guān)鍵詞
    for doc_id, keywords in enumerate(top_keywords1):
        print(f'文檔 {doc_id + 1} 的前10個關(guān)鍵詞: {", ".join(keywords)}')

    document_keywords = top_keywords1[19]  # 假設(shè)第20個文檔的索引是19
    generate_wordcloud(document_keywords, 'wordcloud')

到了這里,關(guān)于NLP自然語言處理——關(guān)鍵詞提取之 TextRank 算法(五分鐘帶你深刻領(lǐng)悟TextRank算法的精髓)保姆級教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • NLP(自然語言處理)

    NLP(自然語言處理)

    ?一、NLP是什么 自然語言處理( Natural Language Processing, NLP)是計算機(jī)科學(xué)領(lǐng)域與人工智能領(lǐng)域中的一個重要方向。它研究能實現(xiàn)人與計算機(jī)之間用自然語言進(jìn)行有效通信的各種理論和方法。自然語言處理是一門融語言學(xué)、計算機(jī)科學(xué)、數(shù)學(xué)于一體的科學(xué)。因此,這一領(lǐng)域的研究

    2024年02月02日
    瀏覽(92)
  • 自然語言處理-NLP

    自然語言處理-NLP

    目錄 自然語言處理-NLP 致命密碼:一場關(guān)于語言的較量 自然語言處理的發(fā)展歷程 興起時期 符號主義時期 連接主義時期 深度學(xué)習(xí)時期 自然語言處理技術(shù)面臨的挑戰(zhàn) 語言學(xué)角度 同義詞問題 情感傾向問題 歧義性問題 對話/篇章等長文本處理問題 探索自然語言理解的本質(zhì)問題

    2024年02月11日
    瀏覽(29)
  • 自然語言處理NLP介紹——NLP簡介
  • NLP自然語言處理介紹

    自然語言處理(NLP,Natural Language Processing)是一門涉及計算機(jī)與人類語言之間交互的學(xué)科。它的目標(biāo)是使計算機(jī)能夠理解和生成人類語言,從而更好地處理和解析大量的文本數(shù)據(jù)。NLP不僅是人工智能領(lǐng)域中一個重要的分支,也是當(dāng)今社會應(yīng)用廣泛的領(lǐng)域之一。 在NLP中,一個基

    2024年01月21日
    瀏覽(48)
  • 自然語言處理2-NLP

    自然語言處理2-NLP

    目錄 自然語言處理2-NLP 如何把詞轉(zhuǎn)換為向量 如何讓向量具有語義信息 在CBOW中 在Skip-gram中 skip-gram比CBOW效果更好 CBOW和Skip-gram的算法實現(xiàn) Skip-gram的理想實現(xiàn) Skip-gram的實際實現(xiàn) 在自然語言處理任務(wù)中, 詞向量(Word Embedding)是表示自然語言里單詞的一種方法 ,即把每個詞都表

    2024年02月11日
    瀏覽(49)
  • 自然語言處理(NLP)技術(shù)

    ????????自然語言處理技術(shù)是一種人工智能技術(shù),它的目標(biāo)是使計算機(jī)能夠理解、分析、處理和生成自然語言(人類使用的語言)。NLP技術(shù)包括文本分類、情感分析、機(jī)器翻譯、語音識別、語音合成、信息檢索、信息抽取、問答系統(tǒng)等。NLP技術(shù)的應(yīng)用非常廣泛,例如智能客

    2024年02月14日
    瀏覽(33)
  • 聊聊自然語言處理NLP

    自然語言處理(NLP)的正式定義:是一個使用計算機(jī)科學(xué)、人工智能(AI)和形式語言學(xué)概念來分析自然語言的研究領(lǐng)域。不太正式的定義表明:它是一組工具,用于從自然語言源(如web頁面和文本文檔)獲取有意義和有用的信息。 NLP工具的實現(xiàn)一般是基于機(jī)器學(xué)習(xí)與深度學(xué)習(xí)、其它

    2024年02月14日
    瀏覽(36)
  • 自然語言處理NLP:一文了解NLP自然語言處理技術(shù),NLP在生活中的應(yīng)用,圖導(dǎo)加深了解,NLP語料庫,NLP開源工具

    目錄 1.自然語言處理NLP 1.1?NLP中英對照(雙份) 1.2 相關(guān)文章? 2.NLP語料庫

    2024年02月09日
    瀏覽(41)
  • 自然語言處理(NLP) —— 心理語言學(xué)

    自然語言處理(NLP) —— 心理語言學(xué)

    ????????認(rèn)知科學(xué)和心理語言學(xué)是兩個密切相關(guān)的領(lǐng)域,它們研究 認(rèn)知過程和語言使用是如何相互作用的。 ????????在歷史上,這兩個領(lǐng)域的發(fā)展經(jīng)歷了幾個重要的階段: 1.1.1?19世紀(jì)晚期(內(nèi)省法) ????????Wundt 和其他德國心理學(xué)家使用一種叫做 內(nèi)省法 的研究方

    2024年02月21日
    瀏覽(94)
  • 自然語言處理(NLP)是什么?

    自然語言處理(NLP)是什么?

    您有沒有和聊天機(jī)器人互動過?或者您是否向虛擬助手,例如 Siri、Alexa 或您車上的車載娛樂系統(tǒng)發(fā)出過某些請求?您使用過在線翻譯嗎?我們大多數(shù)人都曾與這些人工智能 (AI) 互動過,我們也從未停止過思考如何便捷地表達(dá)我們的需求并獲得適當(dāng)?shù)幕貞?yīng)。如果我和Siri說:“

    2024年02月10日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包