腳本後續更新及迭代將由kkitDeploy項目代替
https://github.com/luckman666/kkitdeploy_server
請大家持續關注kkitDeploy
波哥的麥克風線依然沒到。。。
我們都知道ELK用來處理分析一些非結構化數據,比如日誌分析、中文檢索之類的。今天波哥就花了點時間來寫個小例子,還是五十行的代碼來給大家簡單演示一下分詞及索引。
並且這個例子可以結合我們上一個聊天機器人的例子來做語句分析。比如機器人說了一句話,通過這個例子來過濾其語句信息,然後匹配相應的敏感詞,觸發敏感詞之後我們反饋什麼信息給對方。這樣一個簡單的分詞匹配就實現了!
那麼我們來看一下效果:
輸入幾個關鍵字,程序自動判斷出自哪個詩人的詩句。
這裏面我們用了jieba,nltk兩個python模塊!
jieba是著名的python中文分詞模塊,什麼叫分詞?
簡單說一下吧:
比如:你幹啥去了?
這句話正確分詞應該是:你,幹啥,去了。
而不能分成:你幹,啥去,了。
大概這個意思吧!分詞嘛,一句話分成多個有意義的詞組。
但是這裏面學問可多了去了。我只是簡單介紹一下。
nltk所有自然語言處理方面的開發者都會接觸到的一個模塊。
這裏呢我們選用 NLTK 提供的貝葉斯分類器模型做訓練。當然NLTK中有很多模型供我們使用,這裏我們僅選用了貝葉斯分類器來做實例的演示:
先上倉庫位置:
https://github.com/luckman666/jiebaAndNltk.git
再上代碼:
import jieba
from nltk.classify import NaiveBayesClassifier
**# 需要提前把李白的詩收集一下,放在libai.txt文本中。**
text1 = open(r"libai.txt", "rb").read()
list1 = jieba.cut(text1)
result1 = " ".join(list1)
**# 需要提前把杜甫的詩收集一下,放在dufu.txt文本中。**
text2 = open(r"dufu.txt", "rb").read()
list2 = jieba.cut(text2)
result2 = " ".join(list2)
**# 數據準備**
libai = result1
dufu = result2
**# 特徵提取**
def word_feats(words):
return dict([(word, True) for word in words])
libai_features = [(word_feats(lb), 'lb') for lb in libai]
dufu_features = [(word_feats(df), 'df') for df in dufu]
train_set = libai_features + dufu_features
# 訓練決策
classifier = NaiveBayesClassifier.train(train_set)
# 分析測試
sentence = input("請輸入一句你喜歡的詩:")
print("\n")
seg_list = jieba.cut(sentence)
result1 = " ".join(seg_list)
words = result1.split(" ")
# 統計結果
lb = 0
df = 0
for word in words:
classResult = classifier.classify(word_feats(word))
if classResult == 'lb':
lb = lb + 1
if classResult == 'df':
df = df + 1
# 呈現比例
x = float(str(float(lb) / len(words)))
y = float(str(float(df) / len(words)))
print('李白的可能性:%.2f%%' % (x * 100))
print('杜甫的可能性:%.2f%%' % (y * 100))
這期小腳本可能稍微深入了一點點,對於自然語言及分詞是什麼、如何使用等問題我們可以結合上面的小腳本再查找一些資料來理解一下就好了。
其實編程只是一個工具,代碼其實非常簡單,波哥的腳本就50行。這50行代碼我們只幹了兩件事,數據的輸入和輸出。至於後面對數據的分析,處理等等一系列工作我們並沒有涉及到。而那些內容就是當下最火的算法、深度學習、人工智能等等方向的核心領域了。感興趣的朋友可以去學習探索一下!
今天到這了,覺得不錯記得幫波哥轉發分享哦!