Python文本處理nltk基礎


自然語言處理 -->計算機數據 ,計算機可以處理vector,matrix 向量矩陣。

NLTK 自然語言處理庫,自帶語料,詞性分析,分類,分詞等功能。

簡單版的wrapper,比如textblob。

import nltk
nltk.download() #可以下載語料庫等。
#自帶的語料庫
from nltk.corpus import brown
brown.categories()
len(brown.sents()) # 多少句話
len(brown.words()) # 多少個單詞

 

一 簡單的文本預處理流水線

 1.分詞 Tokenize    長句子分成有意義的小部件。

sentence = "hello word"
nltk.word_tokenize(sentence)

 nltk的分詞對於中文是無效的,因為英文是詞語按照空格鍵分開的,而中文單個字分開是無效的,比如今天天氣不錯,要分成 今天/天氣/不錯/!

中文有兩種 1 啟發式 Heuristic ,就是比如最長詞,字典作為詞庫,有今天,沒有今天天這么長的,所以今天為一個詞。

     2 機器學習/統計方法:HMM,CRF。(coreNLP ,斯坦福)

      中文分詞 結巴。

分完詞之后再調用nltk。

社交網絡語音的分詞,會員表情符號,url,#話題,@某人 需要正則表達式來預處理。

2 nltk.pos_tag(text)  #text為分詞完的list,part of speech 在這句話中的部分,adj adv,det(the,a這種)

3 stemming 詞干提取 如walking 到walk

    lemmatize(postag)詞形歸一 #會根據詞性,把is am are 歸一成be went 歸一成go 這種

4  stop words(停止詞),   he,the這些沒有意義的詞,直接刪掉。

from nltk.corpus import stopwords
[word for word in word_list if word not in stopwords.words('english')]

插入圖片1 流程

插入圖片2 life is like a box of chocolate

二  向量化

nltk在nlp的經典應用1情感分析 2 文本相似度 3 文本分類(用的最多,如新聞分類)

1.情感分析:

  最簡單的 sentiment dictionary

       字典中單詞的正負性,如 like 1分 good 2分 bad -2 分 terrible -3 分。  一句話所有的詞打分,相加看正負。

sentimen_dictionary = {}
for line in open('*.txt'):
  word,score = line.split('\t')
  sentiment_dictionary[word] = int(score)
total_score = sum(sentiment_dictionary.get(word,0) for word in words) #字典中有則score,沒有的Word則0分。

 

#有的人罵的比較黑裝粉,需要配上ML
from nltk.classify import NaiveBayesClassifier
# 隨手的簡單訓練集
s1 = 'this is a good book'
s2 = 'this is a awesome book'
s3 = 'this is a bad book'
s4 = 'this is a terrible book'
def preprocess(s):
 #句子處理,這里是用split(),把每個單詞都分開,沒有用到tokenize,因為例子比較簡單。
     return {word : True for word in s.lower().split()}        
    #{fname,fval} 這里用true是最簡單的存儲形式,fval 每個文本單詞對應的值,高級的可以用word2vec來得到fval。
#訓練 this is terrible good awesome bad book 這樣一次單詞長列(1,1,0,1,0,0,1)如s1對應的向量

training_data = [ [preprocess(s1),'pos'],
                           [preprocess(s1),'pos'],
                          [preprocess(s1),'neg'],
                         [preprocess(s1),'neg']]
model = NaiveBayesClassifier.train(training_data)
print(model.classify(preprocess('this is a good book')))     

2.文本相似性

  把文本變成相同長度的向量,通過余弦相似度求相似性。

  nltk中FreqDist統計文字出現的頻率

3.文本分類

    TF-IDF

    TF,Term Frequency,一個term在一個文檔中出現的有多頻繁。

    TF(t) = t出現在文檔中的次數/文檔中的term總數

    IDF :Inverse Document Frequency,衡量一個term有多重要,如 is the 這些不重要

    把罕見的權值農高。

    IDF(t) = log e (文檔總數/含有t的文檔總數)

    TF-IDF = TF×IDF

from nltk.text import TextCollection
# 首首先, 把所有的文文檔放到TextCollection類中。
# 這個類會自自動幫你斷句句, 做統計, 做計算
corpus = TextCollection(['this is sentence one',
    'this is sentence two',
    'this is sentence three'])
# 直接就能算出tfidf
# (term: 一一句句話中的某個term, text: 這句句話)
print(corpus.tf_idf('this', 'this is sentence four'))
# 0.444342
# 同理理, 怎么得到一一個標准大大小小的vector來表示所有的句句子子?
# 對於每個新句句子子
new_sentence = 'this is sentence five'
# 遍歷一一遍所有的vocabulary中的詞:
for word in standard_vocab:
    print(corpus.tf_idf(word, new_sentence))
# 我們會得到一一個巨⻓長(=所有vocab⻓長度)的向量量

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM