使用 Python 的詞幹提取

在下面的教程中,我們將了解使用 Python 編程語言中的 NLTK(自然語言工具包)包來詞幹的過程。

詞幹學導論

詞幹是自然語言處理流水線過程的重要組成部分。詞幹是生成詞根/基本詞的形態修改的過程。詞幹程序通常被認為是詞幹算法或詞幹分析器。詞幹算法將“檢索”、“檢索”、“檢索”等詞簡化為詞根詞,將“檢索”和“蟲火谷”、“巧克力”、“巧克力”等詞簡化為詞幹“巧克力”。詞幹分析器的輸入是分詞的單詞。但是這些符號化的單詞從何而來呢?分詞包括將文檔分解成不同的單詞。要了解更多關於分詞的知識,可以參考關於“Python 中的分詞”的教程。

現在讓我們理解詞幹中的錯誤。

理解詞幹中的錯誤

詞幹錯誤主要分為兩類:

  1. 過詞幹:當兩個詞來源於不同詞幹的同一個詞根時,就會出現這個錯誤。過度堵塞也可以被視為誤報。
  2. 詞幹不足:當兩個單詞來自同一個詞根而不是不同的詞幹時,會出現此錯誤。詞幹不足也可以被認為是假陰性。

現在讓我們看看詞幹的一些應用。

理解詞幹的應用

詞幹的一些應用如下:

  1. 我們可以在信息恢復系統中使用詞幹作為搜索引擎。
  2. 我們也可以使用詞幹來確定領域分析中的領域詞彙。
  3. 一個有趣的事實是,谷歌搜索在 2003 年採用了詞幹。以前搜索“魚”不會返回“魚”或“捕魚”。

理解詞幹算法

一些詞幹算法如下:

  1. 波特的斯特梅爾算法
  2. 愛之聲
  3. 道森准下士同意
  4. krovetz stemmer 先生
  5. 施樂之聲
  6. N-Gram Voices
  7. 雪球斯特梅爾
  8. 蘭開斯特 投票

現在讓我們簡單討論一下這些詞幹算法。

波特的斯特梅爾算法

波特的斯特梅爾算法是 1980 年提出的著名詞幹方法之一。這個概念是基於這樣一個原則,即英語中的後綴是由更小更簡單的後綴組合而成的。這種詞幹分析器因其速度快和簡單而受歡迎。波特·斯特梅爾的主要應用包括數據挖掘和數據恢復。然而,這些應用僅限於英語單詞。而且,詞幹組映射到同一個詞幹上,輸出的詞幹不一定是有意義的詞。這些算法相當長,被稱為最古老的詞幹分析器。

假設 EED -> EE 的意思是“如果這個單詞至少有一個元音和輔音加上 EED 結尾,把結尾改成 EE”,因為‘同意’變成了‘同意’。

優勢:與其他詞幹分析器相比,它產生的輸出最好,錯誤率更低。

限制:產生的形態修飾並不總是真實的單詞。

愛之聲

它是由 Lovins 在 1968 年提出的,從一個單詞中刪除最長的後綴,然後記錄這個單詞,以便將這個詞幹轉換成有效的單詞。

例如,坐着->坐着->坐着

優勢:洛文斯斯特梅爾速度快,管理不規則複數。比如‘牙’和‘牙’等。

限制:這個過程很耗時,經常無法從詞幹中形成單詞。

道森准下士同意

它是 Lovins 詞幹分析器的一個擴展,其中後綴按照長度和最後一個字母的反向順序進行索引。

優勢:道森斯特梅爾的處決速度快,覆蓋面更足。

限制:實現非常複雜。

krovetz stemmer 先生

羅伯特·克羅威茨於 1993 年提出了克羅威茨·斯特梅爾。該詞幹算法遵循如下所示的一些步驟:

  1. 將單詞的複數形式轉換為單數形式。
  2. 把一個單詞的過去時轉換成現在時,去掉後綴“ing”。

例如,“兒童”->“兒童”

優勢: Krovetz 斯特梅爾比較輕,我們可以把它作為其他詞幹器的前置詞幹器。

限制:這種詞幹算法在大文檔的情況下效率很低。

施樂之聲

施樂斯特梅爾能夠管理大數據,並能生成有效的單詞。然而,過度詞幹是很高的,因為它對詞彙的依賴使它依賴於語言。因此,這種詞幹算法的主要限制是它是特定於語言的。

例如:

孩子->孩子

理解->理解

誰->誰

最佳->好

N-Gram Voices

N-Gram 是從一個單詞中提取的n個連續字符的集合,其中相似的單詞通常具有高比例的 N-Gram。

例如,n = 2 的“INTRODUCTIONS”變為:I、IN、NT、TR、RO、OD、DU、UC、CT、TI、IO、ON、NS、S

優勢:該詞幹算法基於字符串比較,並且依賴於語言。

限制:創建和索引 n 克需要空間,時間效率不高。

雪球斯特梅爾

與波特·斯特梅爾不同,雪球斯特梅爾也能映射非英語單詞。由於這個詞幹算法支持多種語言,我們可以稱雪球斯特梅爾為多語言詞幹。雪球莖幹器也是從 NLTK 包中導入的。這種算法基於一種被稱為“雪球”的編程語言,該語言處理小字符串,是斯特梅爾使用最廣泛的語言。這個詞幹算法比波特斯特梅爾更激進,也被認為是波特 2 斯特梅爾。由於與波特斯特梅爾相比有所改進,雪球莖幹分析器的計算速度非常快。

蘭開斯特 投票

與其他兩種算法相比,蘭開斯特詞幹分析器更具攻擊性和動態性。該詞幹算法速度快;然而,它在處理小詞時令人困惑。然而,沒有像雪球莖幹一樣高效。蘭卡斯特詞幹分析器從外部保存規則,並從根本上利用迭代算法。

現在,讓我們看看使用 Python 編程語言中的 NLTK 包來實現詞幹。

Python 中詞幹的實現

讓我們考慮下面的例子,用 Python 中的 NLTK 包演示詞幹的實現。

示例:


# importing the required modules
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize

# creating an object of the PorterStemmer class
pStemmer = PorterStemmer()

# selecting some words to be stemmed
list_of_words = ["consult", "consultant", "consulting", "consultantative", "consultants", "consulting"]

for words in list_of_words:
    print(words + ": " + pStemmer.stem(words))

輸出:

consult: consult
consultant: consult
consulting: consult
consultantative: consult
consultants: consult
consulting: consult

說明:

在上面的代碼片段中,我們已經導入了所需的模塊。然後我們創建了一個 NLTK 包的 PorterStemmer 類的對象。然後,我們創建了一個需要詞幹的單詞列表。最後,我們使用循環的來遍歷列表中的單詞,並使用詞幹()函數對它們進行詞幹處理。

我們可以觀察到,在上面的例子中,我們沒有使用 word_tokenize() 函數。讓我們考慮另一個使用 word_tokenize() 函數演示詞幹的例子。

示例:


# importing the required modules
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize

# creating an object of the PorterStemmer class
pStemmer = PorterStemmer()

# given sentence
sentence = "People comes to consultants office to consult the consultant"
# tokenizing the sentence
list_of_words = word_tokenize(sentence)

for words in list_of_words:
    print(words, " : ", pStemmer.stem(words))

輸出:

People  :  peopl
comes  :  come
to  :  to
consultants  :  consult
office  :  offic
to  :  to
consult  :  consult
the  :  the
consultant  :  consult

說明:

在上面的代碼片段中,我們已經導入了所需的模塊,並創建了一個 PorterStemmer 類的對象。然後,我們定義了一個必須進行詞幹處理的字符串。然後,我們使用了 word_tokenize() 函數來標記句子。最後,我們使用循環的來遍歷單詞列表,並使用詞幹()函數來詞幹。


原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/301662.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-30 16:09
下一篇 2024-12-30 16:09

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python編程二級證書考試相關現已可以上網購買

    計算機二級Python考試是一項重要的國家級認證考試,也是Python編程的入門考試。與其他考試一樣,Python編程二級證書的考生需要進入正式考試,而為了備考,這篇文章將詳細介紹…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29

發表回復

登錄後才能評論