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

用Python進(jìn)行一些簡單的自然語言處理的教程

 更新時間:2015年03月31日 15:42:16   作者:Fletcher Heisler  
這篇文章主要介紹了用Python進(jìn)行一些簡單的自然語言處理的教程,主要用到了pandas和collections庫,需要的朋友可以參考下

本月的每月挑戰(zhàn)會主題是NLP,我們會在本文幫你開啟一種可能:使用pandas和python的自然語言工具包分析你Gmail郵箱中的內(nèi)容。

NLP-風(fēng)格的項(xiàng)目充滿無限可能:

  •     情感分析是對諸如在線評論、社交媒體等情感內(nèi)容的測度。舉例來說,關(guān)于某個話題的tweets趨向于正面還是負(fù)面的意見?一個新聞網(wǎng)站涵蓋的主題,是使用了更正面/負(fù)面的詞語,還是經(jīng)常與某些情緒相關(guān)的詞語?這個“正面”的Yelp點(diǎn)評不是很諷刺么?(祝最后去的那位好運(yùn)?。?/li>
  •     分析語言在文學(xué)中的使用,進(jìn)而衡量詞匯或者寫作風(fēng)格隨時間/地區(qū)/作者的變化趨勢.
  •     通過識別所使用的語言的關(guān)鍵特征,標(biāo)記是否為垃圾內(nèi)容。
  •     基于評論所覆蓋的主題,使用主題抽取進(jìn)行相似類別的劃分。
  •     通過NLTK's的語料庫,應(yīng)用Elastisearch和WordNet的組合來衡量Twitter流API上的詞語相似度,進(jìn)而創(chuàng)建一個更好的實(shí)時Twitter搜索。
  •     加入NaNoGenMo項(xiàng)目,用代碼生成自己的小說,你可以從這里大量的創(chuàng)意和資源入手。

將Gmail收件箱加載到pandas

讓我們從項(xiàng)目實(shí)例開始!首先我們需要一些數(shù)據(jù)。準(zhǔn)備你的Gmail的數(shù)據(jù)存檔(包括你最近的垃圾郵件和垃圾文件夾)。

https://www.google.com/settings/takeout

現(xiàn)在去散步吧,對于5.1G大小的信箱,我2.8G的存檔需要發(fā)送一個多小時。

當(dāng)你得到數(shù)據(jù)并為工程配置好本地環(huán)境之后好,使用下面的腳本將數(shù)據(jù)讀入到pandas(強(qiáng)烈建議使用IPython進(jìn)行數(shù)據(jù)分析)
 

from mailbox import mbox
import pandas as pd
 
def store_content(message, body=None):
 if not body:
  body = message.get_payload(decode=True)
 if len(message):
  contents = {
   "subject": message['subject'] or "",
   "body": body,
   "from": message['from'],
   "to": message['to'],
   "date": message['date'],
   "labels": message['X-Gmail-Labels'],
   "epilogue": message.epilogue,
  }
  return df.append(contents, ignore_index=True)
 
# Create an empty DataFrame with the relevant columns
df = pd.DataFrame(
 columns=("subject", "body", "from", "to", "date", "labels", "epilogue"))
 
# Import your downloaded mbox file
box = mbox('All mail Including Spam and Trash.mbox')
 
fails = []
for message in box:
 try:
  if message.get_content_type() == 'text/plain':
   df = store_content(message)
  elif message.is_multipart():
   # Grab any plaintext from multipart messages
   for part in message.get_payload():
    if part.get_content_type() == 'text/plain':
     df = store_content(message, part.get_payload(decode=True))
     break
 except:
  fails.append(message)

上面使用Python的mailbox模塊讀取并解析mbox格式的郵件。當(dāng)然還可以使用更加優(yōu)雅的方法來完成(比如,郵件中包含大量冗余、重復(fù)的數(shù)據(jù),像回復(fù)中嵌入的“>>>”符號)。另外一個問題是無法處理一些特殊的字符,簡單起見,我們進(jìn)行丟棄處理;確認(rèn)你在這一步?jīng)]有忽略信箱中重要的部分。

需要注意的是,除了主題行,我們實(shí)際上并不打算利用其它內(nèi)容。但是你可以對時間戳、郵件正文進(jìn)行各種各樣有趣的分析,通過標(biāo)簽進(jìn)行分類等等。鑒于這只是幫助你入門的文章(碰巧會顯示來自我自己信箱中的結(jié)果),我不想去考慮太多細(xì)節(jié)。

查找常用詞語

現(xiàn)在我們已經(jīng)得到了一些數(shù)據(jù),那么來找出所有標(biāo)題行中最常用的10個詞語:
 

# Top 10 most common subject words
from collections import Counter
 
subject_word_bag = df.subject.apply(lambda t: t.lower() + " ").sum()
 
Counter(subject_word_bag.split()).most_common()[:10]
 
[('re:', 8508), ('-', 1188), ('the', 819), ('fwd:', 666), ('to', 572), ('new', 530), ('your', 528), ('for', 498), ('a', 463), ('course', 452)]

嗯,那些太常見了,下面嘗試對常用詞語做些限制:
 

from nltk.corpus import stopwords
stops = [unicode(word) for word in stopwords.words('english')] + ['re:', 'fwd:', '-']
subject_words = [word for word in subject_word_bag.split() if word.lower() not in stops]
Counter(subject_words).most_common()[:10]
 
[('new', 530), ('course', 452), ('trackmaven', 334), ('question', 334), ('post', 286), ('content', 245), ('payment', 244), ('blog', 241), ('forum', 236), ('update', 220)]

除了人工移除幾個最沒價值的詞語,我們也使用了NLTK的停用詞語料庫,使用前需要進(jìn)行傻瓜式安裝?,F(xiàn)在可以看到我收件箱中的一些典型詞語,但通常來講在英文文本中并不一定同樣是典型的。

二元詞組和搭配詞

NLTK可以進(jìn)行另外一個有趣的測量是搭配原則。首先,我們來看下常用的“二元詞組”,即經(jīng)常一起成對出現(xiàn)的兩個單詞的集合:
 

from nltk import collocations
bigram_measures = collocations.BigramAssocMeasures()
bigram_finder = collocations.BigramCollocationFinder.from_words(subject_words)
 
# Filter to top 20 results; otherwise this will take a LONG time to analyze
bigram_finder.apply_freq_filter(20)
for bigram in bigram_finder.score_ngrams(bigram_measures.raw_freq)[:10]:
 print bigram
 
(('forum', 'content'), 0.005839453284373725)
(('new', 'forum'), 0.005839453284373725)
(('blog', 'post'), 0.00538045695634435)
(('domain', 'names'), 0.004870461036311709)
(('alpha', 'release'), 0.0028304773561811506)
(('default', 'widget.'), 0.0026519787841697267)
(('purechat:', 'question'), 0.0026519787841697267)
(('using', 'default'), 0.0026519787841697267)
(('release', 'third'), 0.002575479396164831)
(('trackmaven', 'application'), 0.002524479804161567)

我們可以對三元詞組(或n元詞組)重復(fù)相同的步驟來查找更長的短語。這個例子中,“new forum content”是出現(xiàn)次數(shù)最多的三元詞組,但是在上面例子的列表中,它卻被分割成兩部分并位居二元詞組列表的前列。

另外一個稍微不同類型的搭配詞的度量是基于點(diǎn)間互信息(pointwise mutual information)的。本質(zhì)上,它所度量的是給定一個我們在指定文本中看到的單詞,相對于他們通常在全部文檔中單獨(dú)出現(xiàn)的頻率,另外一個單詞出現(xiàn)的可能性。舉例來說,通常,如果我的郵件主題使用單詞“blog”與/或“post”很多,那么二元組“blog post”并不是一個有趣的信號,因?yàn)橐粋€單詞仍然可能不和另一個單詞同時出現(xiàn)。根據(jù)這條準(zhǔn)則,我們得到一個不同的二元組的集合。
 

for bigram in bigram_finder.nbest(bigram_measures.pmi, 5):
 print bigram
 
('4:30pm', '5pm')
('motley', 'fool')
('60,', '900,')
('population', 'cap')
('simple', 'goods')

因此,我沒有收到很多提到單詞“motley”或者“fool”的郵件主題,但是當(dāng)我看到其中任意一個,那么“Motley Fool”可能是相關(guān)聯(lián)的。

情感分析

最后,讓我們嘗試一些情感分析。為了快速入門,我們可以使用以NLTK為基礎(chǔ)的TextBlob庫,它提供了對于大量的常用NLP任務(wù)的簡單訪問。我們可以使用它內(nèi)建的情感分析(基于模式)來計(jì)算主題的“極性(polarity)”。從,表示高度負(fù)面情緒的-1到表示正面情緒的1,其中0為中性(缺乏一個明確的信號)

接下來:分析一段時間內(nèi)的你的收件箱;看看是否能夠通過郵件分類,確定正文的發(fā)送者/標(biāo)簽/垃圾這些基本屬性。使用潛在語義索引去揭示所涵蓋的最常用的常規(guī)主題。將你的發(fā)件文件夾輸入到馬爾科夫模型(Markov model)中,結(jié)合詞性標(biāo)注生成看起來連貫的自動回復(fù)

讓我們知道你是否使用NLP嘗試了有趣的項(xiàng)目分支,包含一份開源庫將作為加分點(diǎn)。你可以在challenge.hackpad.com看下前面的展示,以找到更多的靈感!

相關(guān)文章

  • Pytorch如何切換 cpu和gpu的使用詳解

    Pytorch如何切換 cpu和gpu的使用詳解

    這篇文章主要介紹了Pytorch如何切換 cpu和gpu的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python使用sort和class實(shí)現(xiàn)的多級排序功能示例

    Python使用sort和class實(shí)現(xiàn)的多級排序功能示例

    這篇文章主要介紹了Python使用sort和class實(shí)現(xiàn)的多級排序功能,涉及Python基于面向?qū)ο蟮脑乇闅v、列表排序、添加等相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • Python 一鍵制作微信好友圖片墻的方法

    Python 一鍵制作微信好友圖片墻的方法

    這篇文章主要介紹了Python 一鍵制作微信好友圖片墻的方法,有兩種方法,每種方法給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • Python Excel實(shí)現(xiàn)自動添加編號

    Python Excel實(shí)現(xiàn)自動添加編號

    這篇文章主要為大家詳細(xì)介紹了如何使用Python在Excel中實(shí)現(xiàn)自動添加編號效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • PyQt5 在label顯示的圖片中繪制矩形的方法

    PyQt5 在label顯示的圖片中繪制矩形的方法

    今天小編就為大家分享一篇PyQt5 在label顯示的圖片中繪制矩形的方法,具有很好的參考價值。希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 深入理解Python中的內(nèi)置函數(shù)map

    深入理解Python中的內(nèi)置函數(shù)map

    在Python中,map是一個非常實(shí)用的內(nèi)置函數(shù),它允許你對一個序列的所有元素執(zhí)行特定的操作,map函數(shù)的結(jié)果可以被轉(zhuǎn)換為一個列表,或者其他的可迭代對象,在本文中,我們將深入探討map函數(shù)的用法及其在實(shí)際編程中的應(yīng)用
    2023-06-06
  • Python3中詳解fabfile的編寫

    Python3中詳解fabfile的編寫

    這篇文章給大家分享了Python3中詳解fabfile的編寫的相關(guān)知識點(diǎn)以及重要內(nèi)容,有興趣的朋友跟著學(xué)習(xí)下。
    2018-06-06
  • 通過Python來使用七牛云存儲的方法詳解

    通過Python來使用七牛云存儲的方法詳解

    這篇文章主要介紹了通過Python來使用七牛云存儲的方法詳解,七牛云存儲是國內(nèi)領(lǐng)先的服務(wù)器數(shù)據(jù)備份解決方案商,需要的朋友可以參考下
    2015-08-08
  • Python爬蟲Requests庫的使用詳情

    Python爬蟲Requests庫的使用詳情

    這篇文章主要介紹了Python爬蟲Requests庫的使用詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 詳解django自定義中間件處理

    詳解django自定義中間件處理

    這篇文章主要介紹了詳解django自定義中間件處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11

最新評論

通榆县| 固安县| 衢州市| 平山县| 铜山县| 大埔县| 吴忠市| 临洮县| 平安县| 历史| 安平县| 江城| 弥勒县| 平乐县| 孟津县| 寿阳县| 镇远县| 安丘市| 莫力| 甘孜县| 宿松县| 伊春市| 越西县| 客服| 东阿县| 宜良县| 和林格尔县| 宜宾市| 连云港市| 东丽区| 南京市| 正阳县| 玉树县| 乌兰浩特市| 图木舒克市| 新田县| 苏尼特左旗| 十堰市| 会宁县| 通州区| 铜山县|