最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Python中使用NLTK庫實現對詞干的提取的教程

 更新時間:2015年04月08日 16:17:48   作者:陳加興  
這篇文章主要介紹了在Python中使用NLTK庫實現對詞干的提取的教程,其中還用到了Pandas和IPython,需要的朋友可以參考下

什么是詞干提取?

在語言形態(tài)學和信息檢索里,詞干提取是去除詞綴得到詞根的過程─—得到單詞最一般的寫法。對于一個詞的形態(tài)詞根,詞干并不需要完全相同;相關的詞映射到同一個詞干一般能得到滿意的結果,即使該詞干不是詞的有效根。從1968年開始在計算機科學領域出現了詞干提取的相應算法。很多搜索引擎在處理詞匯時,對同義詞采用相同的詞干作為查詢拓展,該過程叫做歸并。

一個面向英語的詞干提取器,例如,要識別字符串“cats”、“catlike”和“catty”是基于詞根“cat”;“stemmer”、“stemming”和“stemmed”是基于詞根“stem”。一根詞干提取算法可以簡化詞 “fishing”、“fished”、“fish”和“fisher” 為同一個詞根“fish”。
技術方案的選擇

Python和R是數據分析的兩種主要語言;相對于R,Python更適合有大量編程背景的數據分析初學者,尤其是已經掌握Python語言的程序員。所以我們選擇了Python和NLTK庫(Natual Language Tookit)作為文本處理的基礎框架。此外,我們還需要一個數據展示工具;對于一個數據分析師來說,數據庫的冗繁安裝、連接、建表等操作實在是不適合進行快速的數據分析,所以我們使用Pandas作為結構化數據和分析工具。
環(huán)境搭建

我們使用的是Mac OS X,已預裝Python 2.7.

安裝NLTK

sudo pip install nltk

安裝Pandas

sudo pip install pandas

對于數據分析來說,最重要的是分析結果,iPython notebook是必備的一款利器,它的作用在于可以保存代碼的執(zhí)行結果,例如數據表格,下一次打開時無需重新運行即可查看。

安裝iPython notebook

sudo pip install ipython

創(chuàng)建一個工作目錄,在工作目錄下啟動iPython notebook,服務器會開啟http://127.0.0.1:8080頁面,并將創(chuàng)建的代碼文檔保存在工作目錄之下。

mkdir Codes
cd Codes
ipython notebook

文本處理

數據表創(chuàng)建

使用Pandas創(chuàng)建數據表 我們使用得到的樣本數據,建立DataFrame——Pandas中一個支持行、列的2D數據結構。

from pandas import DataFrame
import pandas as pd
d = ['pets insurance','pets insure','pet insurance','pet insur','pet insurance"','pet insu']
df = DataFrame(d)
df.columns = ['Words']
df

顯示結果

201548161158999.jpg (303×307)

NLTK分詞器介紹

RegexpTokenizer:正則表達式分詞器,使用正則表達式對文本進行處理,就不多作介紹。
PorterStemmer:波特詞干算法分詞器,原理可看這里:http://snowball.tartarus.org/algorithms/english/stemmer.html
第一步,我們創(chuàng)建一個去除標點符號等特殊字符的正則表達式分詞器:

import nltk
tokenizer = nltk.RegexpTokenizer(r'w+')

接下來,對準備好的數據表進行處理,添加詞干將要寫入的列,以及統(tǒng)計列,預設默認值為1:

df["Stemming Words"] = ""
df["Count"] = 1

讀取數據表中的Words列,使用波特詞干提取器取得詞干:

j = 0
while (j <= 5):
  for word in tokenizer.tokenize(df["Words"][j]):
    df["Stemming Words"][j] = df["Stemming Words"][j] + " " + nltk.PorterStemmer().stem_word(word)
  j += 1
df

Good!到這一步,我們已經基本上實現了文本處理,結果顯示如下:

201548161224388.jpg (747×299)

分組統(tǒng)計

在Pandas中進行分組統(tǒng)計,將統(tǒng)計表格保存到一個新的DataFrame結構uniqueWords中:

uniqueWords = df.groupby(['Stemming Words'], as_index = False).sum().sort(['Count'])
uniqueWords

201548161257262.jpg (718×127)

注意到了嗎?依然還有一個pet insu未能成功處理。

拼寫檢查

對于用戶拼寫錯誤的詞語,我們首先想到的是拼寫檢查,針對Python我們可以使用enchant:

sudo pip install enchant

使用enchant進行拼寫錯誤檢查,得到推薦詞:

import enchant
from nltk.metrics import edit_distance
class SpellingReplacer(object):
  def __init__(self, dict_name='en', max_dist=2):
    self.spell_dict = enchant.Dict(dict_name)
    self.max_dist = 2
  def replace(self, word):
    if self.spell_dict.check(word):
      return word
    suggestions = self.spell_dict.suggest(word)
    if suggestions and edit_distance(word, suggestions[0]) <=
      self.max_dist:
      return suggestions[0]
    else:
      return word

from replacers import SpellingReplacer
replacer = SpellingReplacer()
replacer.replace('insu')

'insu'

但是,結果依然不是我們預期的“insur”。能不能換種思路呢?
算法特殊性

用戶輸入非常重要的特殊性來自于行業(yè)和使用場景。采取通用的英語大詞典來進行拼寫檢查,無疑是行不通的,并且某些詞語恰恰是拼寫正確,但本來卻應該是另一個詞。但是,我們如何把這些背景信息和數據分析關聯起來呢?

經過一番思考,我認為最重要的參考庫恰恰就在已有的數據分析結果中,我們回來看看:

201548161325135.jpg (724×132)

已有的5個“pet insur”,其實就已經給我們提供了一份數據參考,我們已經可以對這份數據進行聚類,進一步除噪。

相似度計算

對已有的結果進行相似度計算,將滿足最小偏差的數據歸類到相似集中:

import Levenshtein
minDistance = 0.8
distance = -1
lastWord = ""
j = 0
while (j < 1):
   lastWord = uniqueWords["Stemming Words"][j]
   distance = Levenshtein.ratio(uniqueWords["Stemming Words"][j], uniqueWords["Stemming Words"][j + 1])
   if (distance > minDistance):
    uniqueWords["Stemming Words"][j] = uniqueWords["Stemming Words"][j + 1]
  j += 1
uniqueWords

查看結果,已經匹配成功!

201548161441655.jpg (689×144)

最后一步,重新對數據結果進行分組統(tǒng)計:

uniqueWords = uniqueWords.groupby(['Stemming Words'], as_index = False).sum()
uniqueWords

到此,我們已經完成了初步的文本處理。

201548161529041.jpg (643×103)

相關文章

  • python要安裝在哪個盤

    python要安裝在哪個盤

    在本篇文章里小編給大家分享的是一篇關于python必須裝在c盤嗎的知識點文章,有興趣的朋友們可以學習下。
    2020-06-06
  • Django后端接收嵌套Json數據及解析詳解

    Django后端接收嵌套Json數據及解析詳解

    這篇文章主要介紹了Django后端接收嵌套Json數據及解析詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Python Django項目和應用的創(chuàng)建詳解

    Python Django項目和應用的創(chuàng)建詳解

    這篇文章主要為大家介紹了Python Django項目和應用的創(chuàng)建,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • 利用Python/R語言分別解決金字塔數求和問題

    利用Python/R語言分別解決金字塔數求和問題

    這篇文章將通過兩個小問題:前N階乘求和問題、金字塔數求和問題,帶領大家深入淺出的理解兩種語言的基本語法,并用以實際場景,需要的可以參考一下
    2022-03-03
  • CAPL與Python交互的實現

    CAPL與Python交互的實現

    CAPL能做超級多的功能,本文主要介紹了CAPL與Python交互的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • Python httplib模塊使用實例

    Python httplib模塊使用實例

    這篇文章主要介紹了Python httplib模塊使用實例,httplib模塊是一個底層基礎模塊,本文講解了httplib模塊的常用方法及使用實例,需要的朋友可以參考下
    2015-04-04
  • 使用Python的xlrd和xlwt操作Excel詳解

    使用Python的xlrd和xlwt操作Excel詳解

    這篇文章主要介紹了使用Python的xlrd和xlwt對比操作Excel詳解,xlrd和xlwt是python的第三方庫,xlrd模塊實現對excel文件內容讀取,xlwt模塊實現對excel文件的寫入,需要的朋友可以參考下
    2023-08-08
  • Python3中常用的處理時間和實現定時任務的方法的介紹

    Python3中常用的處理時間和實現定時任務的方法的介紹

    這篇文章主要介紹了Python3中常用的處理時間和實現定時任務的方法,包括循環(huán)執(zhí)行某個任務這樣的實現,需要的朋友可以參考下
    2015-04-04
  • Python MySQLdb 使用utf-8 編碼插入中文數據問題

    Python MySQLdb 使用utf-8 編碼插入中文數據問題

    這篇文章主要介紹了Python MySQLdb 使用utf-8 編碼插入中文數據問題,需要的朋友可以參考下
    2018-03-03
  • python+pyqt5實現圖片批量縮放工具

    python+pyqt5實現圖片批量縮放工具

    這篇文章主要為大家詳細介紹了Python+pyqt5實現圖片批量縮放工具,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03

最新評論

积石山| 辽宁省| 新化县| 玉树县| 汪清县| 鄂托克旗| 灵山县| 日土县| 巴马| 乐清市| 天津市| 肃宁县| 营山县| 桐城市| 喀喇| 胶南市| 和龙市| 阳新县| 苍山县| 阳春市| 土默特右旗| 剑河县| 三门峡市| 卓资县| 仙游县| 哈巴河县| 乌鲁木齐市| 海淀区| 奉新县| 青岛市| 湟中县| 河西区| 宣威市| 辰溪县| 平乡县| 江城| 林甸县| 于都县| 和静县| 和静县| 额尔古纳市|