奮戰聊天機械人(二)語料和詞彙資源

2021-08-07 14:01:41 字數 1856 閱讀 1162

當代自然語言處理都是基於統計的,統計自然需要很多樣本,因此語料和詞彙資源是必不可少的

nltk包含多種語料庫,比如:gutenberg語料庫

nltk.corpus

.gutenberg

.fileids()

類似的語料庫還有:語料庫的幾種組織結構:

- 散養式(孤立的多篇文章)

- 分類式(按照類別組織、相互之間沒有交集)

- 交叉式(一篇文章可能屬於多個類)

- 漸變式(語法隨時間發生變化)

from nltk.corpus import plaintextcorpusreader

corpus_root = '/tmp'

wordlists = plaintextcorpusreader(corpus_root, '.*')

wordlists.fileids()

就可以列出自己語料庫的各個檔案了,也可以使用如wordlists.sents(『a.txt』)和wordlists.words(『a.txt』)等方法來獲取句子和詞資訊

自然語言的條件頻率分布就是指定條件下某個事件的頻率分布

比如要輸出在布朗語料庫中每個類別條件下每個詞的頻率

# encoding:utf-8

import nltk

from nltk.corpus import brown

# 鍊錶推導式,genre是brown語料庫裡的所有類別列表,word是這個類別中的詞彙列表

# (genre, word)就是類別加詞彙對

genre_word = [(genre, word)

for genre in brown.categories()

for word in brown.words(categories=genre)]

# 建立條件頻率分布

cfd = nltk.conditionalfreqdist(genre_word)

# 指定條件和樣本作圖

cfd.plot(conditions=['news', 'adventure'], samples=[u'stock', u'sunbonnet'])

# 自定條件和樣本作**

cfd.tabulate(conditions=['news', 'adventure'], samples=[u'stock', u'sunbonnet'])

我們還可以利用條件頻率分布,按照最大條件概率生成雙連詞,最終生成乙個隨機文字

這可以直接使用bigrams()函式,它的功能是生成詞對鍊錶。

# encoding:utf-8

import nltk

# 迴圈10次,從cddist中取當前單詞最大概率的連詞,並列印出來

defgenerate_model

(cfdist, word, num=10):

for i in range(num):

print(word)

word = cfdist[word].max()

# 載入語料庫

text = nltk.corpus.genesis.words('english-kjv.txt')

# 生成雙連詞

bigrams = nltk.bigrams(text)

# 生成條件頻率分布

cfd = nltk.conditionalfreqdist(bigrams)

# 以 the 開頭,生成隨機串

generate_model(cfd, 'the')

有一些僅是詞或短語以及一些相關資訊的集合,叫做詞典資源。

聊天機械人

我你好!小愛同學 小愛你好,很高興認識你!charset utf 8 css document 休息一會 sleep 1 獲取 使用者傳送的 訊息 可選 後端 對於 使用者發過來的 時候 是否 使用 可選 根據 傳送 過來的 訊息 返回 不同的內容 messagelist array 床前明月光,有...

奮戰聊天機械人(三)自動化對語料做詞性標註

import nltk porter nltk.porterstemmer porter.stem lying import nltk text nltk.word tokenize and now for something completely different nltk.pos tag te...

機械人聊天軟體c C 聊天機械人

例項簡介 c 聊天機械人 例項截圖 核心 3181078聊天機械人 原始碼必讀.pdf 聊天機械人 1.ico 聊天機械人 1.ico form1.designer.cs form1.cs form1.resx program.cs properties assemblyinfo.cs resour...