前敘
博主寫這篇文章使用了八十分鍾,閱讀需要十五分鍾,讀完之后你將會學會在Python中使用NLPIR2016.如果你花費更多的時間練習后半部分的例子,你將能夠在一天內學會在Python中使用NLPIR2016的全部所需知識
如果你想要獲取更詳細的API翻譯,你需要進一步學習ctypes,附贈一篇關於API翻譯,雖然是java語言的,但是NLPIR的接口翻譯都是一樣的
http://blog.csdn.net/fontthrone/article/details/72882938
我決定上傳一下有關NLP的博客中的源碼:
http://blog.csdn.net/fontthrone/article/details/72885329
如何使用接口
將打包好的[組合包]下所有內容拖入你的項目,然后開始在你的py文件中通過引用nlpir中的方法使用NLPIR2016
#如果想要使用NLPIR需要的基本的配置
from nlpir import *
# 在引用nlpir之后就可以按照引用其他py文件的一般方法使用NLPIR2016
from ctypes import *
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
# 在Python2.x中需要配置文件的默認編碼這樣可以避免很多編碼問題
from os import path
d = path.dirname(__file__)
# 獲取當前路徑,在后續的許多代碼中可能需要使用該路徑
text_path = 'txt/lztest.txt' #設置要分析的文本路徑
stopwords_path = 'stopwords\stopwords1893.txt' # 停用詞詞表
text = open(path.join(d, text_path)).read()
txt = seg(text)
seg_list =[]
for t in txt:
seg_list.append(t[0].encode('utf-8'))
# seg_list += ' '
# 使用NLPIR進行中文分詞
print seg_list
# 直接輸出 seg_list會出現亂碼
for j in seg_list:
print j
# 顯示效果如下圖
用戶自定義詞庫的兩種方式
1. 修改NLPIR的詞庫
想要修改NLPIR的詞庫你可以閱讀官方的文檔,其方法為”漢語分詞20140928\importuserdict\Readme.txt”
下面為其中內容:
采用附件的小工具,可以實現脫機導入用戶詞典;具體步驟如下:
1.與分詞Data文件夾同級建立 bin目錄,下面建立二級目錄ICTCLAS2014;
2.將附件的內容解壓縮后放在ICTCLAS2014下面;
3.編輯bin/ICTCLAS2014下面的userdic.txt,這里放置用戶詞典與標注;
4.執行bin/ICTCLAS2014的批處理文件。即可導入用戶詞典到Data目錄下的field.pdat field.pos。
5.30萬詞條會划分更多的時間,可能需要2小時左右。
2.在代碼中動態引用與刪除用戶自定義詞庫
#下面代碼中loadFun的參數c_int,c_uint等為ctype類型,在下文中我會有部分介紹,其足以滿足一般的使用,但是想要深入學習,你需要自己學習該部分
# nlpir的源代碼
ImportUserDict = loadFun('NLPIR_ImportUserDict',c_uint, [c_char_p])
# 從txt文件中導入用戶詞典
AddUserWord = loadFun('NLPIR_AddUserWord', c_int, [c_char_p])
# 添加用戶自定義詞語
SaveTheUsrDic = loadFun('NLPIR_SaveTheUsrDic', c_int, None)
# 將用戶詞典保存到硬盤
DelUsrWord = loadFun('NLPIR_DelUsrWord',c_int, [c_char_p])
# 刪除用戶的自定義詞語
# 例子
AddUserWord('龍族')
AddUserWord('路明非')
AddUserWord('大和炮')
AddUserWord('競技類')
DelUsrWord('競技類')
# 注意在NLPIR的默認分詞格式中會識別漢語名字,但是測試發現:即使在某個句子中,將一個名字,比如'路明非'分詞成功了,但是在其他句子中並不一定能夠正確分詞,如果你想更好地使用分詞功能,可以和下一個部分中的提取新詞配合使用
提取新詞與關鍵字
text_path = 'txt/lztest.txt' #設置要分析的文本路徑
text = open(path.join(d, text_path)).read()
txt = seg(text)
kw_list =[]
seg_list =[]
# 獲得新詞,第二個參數控制新詞的個數,排名按照TF-IDF(term frequency–inverse document frequency排序
# 該功能可以和AddUserWord()方法配合使用,以更好地獲取分詞效果
strs1 = GetNewWords(text,c_int(10),[c_char_p, c_int, c_bool])
print strs1
# 獲得新詞(從txt文件中),第二個參數控制新詞的個數,排名按照TF-IDF(term frequency–inverse document frequency排序
# strs10 = GetFileNewWords(text,c_int(10),[c_char_p, c_int, c_bool])
# print strs10
# WindowsError: exception: access violation reading 0x0000000000000000
# 獲得關鍵詞,第二個參數控制新詞的個數,排名按照TF-IDF(term frequency–inverse document frequency排序
strs2= GetKeyWords(text,c_int(10),[c_char_p, c_int, c_bool])
print strs2
演示效果如下:
其中第一部分(比如”富山雅史”)為詞語,第二部分(n_new為新詞)為詞性,第三部分為權重(TF*IDF)
使用停用詞的實例
# - * - coding: utf - 8 -*-
#
# 作者:田豐(FontTian)
# 創建時間:'2017/5/31'
# 郵箱:fonttian@163.com
# CSDN:http://blog.csdn.net/fontthrone
from os import path
from nlpir import *
from scipy.misc import imread
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
from ctypes import *
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
d = path.dirname(__file__)
# 添加用戶自定義詞語
AddUserWord('龍族')
AddUserWord('路明非')
AddUserWord('大和炮')
AddUserWord('競技類')
text_path = 'txt/lztest.txt' #設置要分析的文本路徑
stopwords_path = 'stopwords\stopwords1893.txt' # 停用詞詞表
text = open(path.join(d, text_path)).read()
txt = seg(text)
seg_list =[]
for t in txt:
seg_list.append(t[0].encode('utf-8'))
# seg_list += ' '
# 使用NLPIR進行中文分詞
# 去除停用詞
def NLPIRclearText(text):
mywordlist = []
liststr = "/ ".join(seg_list)
f_stop = open(stopwords_path)
try:
f_stop_text = f_stop.read()
f_stop_text = unicode(f_stop_text, 'utf-8')
finally:
f_stop.close()
f_stop_seg_list = f_stop_text.split('\n')
for myword in liststr.split('/'):
if not (myword.strip() in f_stop_seg_list) and len(myword.strip()) > 1:
mywordlist.append(myword)
return ''.join(mywordlist)
# 去除完停用詞的文本
s = NLPIRclearText(seg_list)
print s
結果如下:
使用中的可能會遇見的一些問題
- ctype的問題,想要更好地在Python中使用NLPIR2016,你需要了解該部分
- 控制台輸出utf-8編碼格式中文顯示亂碼,這個在windows中比較常見,原因是控制台的默認中文編碼為gbk或者或者其他格式
- 進一步掌握文章中未介紹的部分方法,你可以直接瀏覽nlpir.py文件或者參考這篇文章:http://blog.csdn.net/fontthrone/article/details/72882938
- 在Python3中使用NLPIR2016,這個你只需要參考官網的文檔即可,這個我就不再做過介紹了