NLTK 008 分類文字(有監督分類的更多例子)

2021-09-23 01:45:09 字數 3242 閱讀 1747

句子分割可以看作是乙個標點符號的分類任務:每當我們遇到乙個可能會結束的句子的符號,我們必須決定他是否終止了當前句子。

#首先獲得一些已被分割成句子的資料  #將他轉換成一種適合提取特徵的形式

import nltk

sents = nltk.corpus.treebank_raw.sents()

tokens =

boundaries = set()

offset = 0

for sent in nltk.corpus.treebank_raw.sents():

tokens.extend(sent)

offset+=len(sent)

boundaries.add(offset-1)

print(boundaries)

在這裡 tokens是單獨句子識別符號的合併鍊錶,boundaries 是乙個包含所有句子邊界識別符號索引的集合。

接著我們要指定用於決定標點是否表示句子邊界的資料特徵:

def punct_features(tokens, i):

return

基於這個特徵提取器,我們可以通過選擇所有的標點符號建立乙個加標籤的特徵集的鍊錶,然後標註他們是否是邊界識別符號:

featuresets = [(punct_features(tokens, i), (i in boundaries))

for i in range(1, len(tokens)-1)if tokens[i] in '.?!']

再訓練乙個標點符號分類器:

size = int(len(featuresets) * 0.1)

train_set, test_set = featuresets[size:], featuresets[:size]

classifier = nltk.*****bayesclassifier.train(train_set)

nltk.classify.accuracy(classifier, test_set)

使用該分類器進行斷句:

def segment_sentences(words):

start = 0

sents =

for i, word in enumerate(words):

if word in '.?!' and classifier.classify(punct_features(words, i)) == true:

start = i+1

if start < len(words):

return sents

在處理對話時,把話語看作說話者所做的一種行為是很有用的。這個解釋是最簡單的表述行為的(表述行為的)語句如「我原諒你」或「我打賭你不能爬那座山。」但是問候語、問題、答案、斷言和說明都可以被認為是基於言語的行為型別。識別對話言語下的對話行為是理解對話的重要的第一步。

nps語料庫中,有超過10000個來自即時訊息會話的帖子。這些帖子都已經被貼上15種對話行為型別中的一種標籤。

posts = nltk.corpus.nps_chat.xml_posts()[:10000]
定義乙個簡單的特徵提取器,檢查帖子包含了什麼詞:

def dialogue_act_features(post):

features = {}

for word in nltk.word_tokenize(post):

features['contains(%s)' % word.lower()] = true

return features

然後為每個帖子提取特徵,構造訓練和測試資料。並建立乙個新的分類器。

featuresets = [(dialogue_act_features(post.text), post.get('class'))

for post in posts]

size = int(len(featuresets) * 0.1)

train_set, test_set = featuresets[size:], featuresets[:size]

classifier = nltk.*****bayesclassifier.train(train_set)

print(nltk.classify.accuracy(classifier, test_set))

識別文字蘊含的意思是判斷文字t的乙個給定片段是否蘊含著另乙個叫做 假設 的文字。

在我們的rte特徵檢測器中,我們讓單詞(即詞型別)作為**的資訊,和我們的特性計算重疊程度的詞,並假設有單詞的程度而不是文字。並不是所有的單詞都是同樣重要的–命名實體,如人的名字,組織和地方可能會是更重要的,這促使我們為word和nes(命名實體)提取不同的資訊,此外,一些高頻虛詞作為「停止詞」被過濾掉。

構造特徵提取器:

def rte_features(rtepair):

extractor = nltk.rtefeatureextractor(rtepair)

features = {}

features['word_overlap'] = len(extractor.overlap('word'))

features['word_hyp_extra'] = len(extractor.hyp_extra('word'))

features['ne_overlap'] = len(extractor.overlap('ne'))

features['ne_hyp_extra'] = len(extractor.hyp_extra('ne'))

return features

為了表明特徵的內容,可以檢驗下前面顯示的文字/假設 的一些屬性

rtepair = nltk.corpus.rte.pairs(['rte3_dev.xml'])[33]

extractor = nltk.rtefeatureextractor(rtepair)

print(extractor.text_words)

print extractor.overlap('word')

print extractor.overlap('ne')

print extractor.hyp_extra('word')

11 分類與監督學習,樸素貝葉斯分類演算法

老師 missdu 提交作業 1.理解分類與監督學習 聚類與無監督學習。簡述分類與聚類的聯絡與區別。簡述什麼是監督學習與無監督學習。答 監督學習 根據已有的資料集,知道輸入和輸出結果之間的關係。根據這種已知的關係,訓練得到乙個最優的模型。無監督學習 我們不知道資料集中資料 特徵之間的關係,而是要根據...

11 分類與監督學習,樸素貝葉斯分類演算法

1.理解分類與監督學習 聚類與無監督學習。簡述分類與聚類的聯絡與區別。簡述什麼是監督學習與無監督學習。2.樸素貝葉斯分類演算法 例項 利用關於心臟病患者的臨床歷史資料集,建立樸素貝葉斯心臟病分類模型。有六個分類變數 分類因子 性別,年齡 killp評分 飲酒 吸菸 住院天數 目標分類變數疾病 心梗 ...

11 分類與監督學習,樸素貝葉斯分類演算法

1.理解分類與監督學習 聚類與無監督學習。簡述分類與聚類的聯絡與區別。聯絡 分類與聚類都是在資料集中尋找離自己最近的點 區別 分類是一種有監督學習,目的是為了確定點的類別,而類別是已知的 聚類是一種無監督學習,目的是將點分為成若干個類,事先是沒有類別的。簡述什麼是監督學習與無監督學習。監督學習 在監...