pos機預(yù)處理什么意思,Python怎么做中文文本預(yù)處理

 新聞資訊  |   2023-04-04 08:17  |  投稿人:pos機之家

網(wǎng)上有很多關(guān)于pos機預(yù)處理什么意思,Python怎么做中文文本預(yù)處理的知識,也有很多人為大家解答關(guān)于pos機預(yù)處理什么意思的問題,今天pos機之家(www.tjfsxbj.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、pos機預(yù)處理什么意思

pos機預(yù)處理什么意思

一 得到原始文本內(nèi)容

def FileRead(self,filePath):

f = open(filePath)

raw=f.read()

return raw

二 中文分詞

def NlpirTokener(self,raw):

result=\'\'

tokens = nlpir.Seg(raw)

for w in tokens:

# result+= w[0]+"/"+w[1] #加詞性標(biāo)注

result+= w[0] +\'/\'#加詞性標(biāo)注

return result

def JiebaTokener(self,raw):

result=\'\'

words = pseg.cut(raw) #進行分詞

result="" #記錄最終結(jié)果的變量

for w in words:

# result+= str(w.word)+"/"+str(w.flag) #加詞性標(biāo)注

result+= str(w.word)+"/" #加詞

return result

網(wǎng)上評測的結(jié)果來看

在Python下可以采用的較好的中文分詞工具是結(jié)巴中文分詞和中科院的分詞系統(tǒng)。

對于這兩個工具進行測試。

1 安裝結(jié)巴中文分詞工具

在32位,Windows7 ,Python2.7下安裝最新的結(jié)巴中文分詞工具。

具體步驟:

(1)下載鏈接https://github.com/fxsjy/jieba,內(nèi)含安裝說明

(2)下載后解壓縮到目錄下,如C:/ jieba-master

(3)進入目錄下,執(zhí)行指令python setup.py install,完成安裝

(4)進行測試,與Java下的NLPIR/ICTCLAS2013進行比較

#coding=utf-8

\'\'\'\'\'

Created on 2014-3-19

測試結(jié)巴中文分詞工具

@author: liTC

\'\'\'

import jieba

import jieba.posseg as pseg

import time

t1=time.time()

#f=open("t_with_splitter.txt","r")#讀取文本

#string=f.read().decode("utf-8")

string=\'祖籍浙江省溫州市,1975年2月28日出生于浙江溫州,歌手。1987年考上浙江溫州清縣小百花越劇團,在團里唱小生。\'

words = pseg.cut(string)#進行分詞

result="" #記錄最終結(jié)果的變量

for w in words:

result+= str(w.word)+"/"+str(w.flag) #加詞性標(biāo)注

print result

f=open("t_with_POS_tag.txt","w") #將結(jié)果保存到另一個文檔中

f.write(result)

f.close()

t2=time.time()

print("分詞及詞性標(biāo)注完成,耗時:"+str(t2-t1)+"秒。") #反饋結(jié)果

測試一:

測試的語句是:“祖籍浙江省溫州市,1975年2月28日出生于浙江溫州,歌手。1987年考上浙江溫州清縣小百花越劇團,在團里唱小生?!?/p>

NLPIR/ICTCLAS2013的結(jié)果是:

祖籍/n 浙江省/ns 溫州市/ns ,/wd 1975年/t 2月/t 28日/t 出生/vi 于/p 浙江/ns 溫州/ns ,/wd 歌手/n 。/wj 1987年/t 考上/v 浙江/ns 溫州/ns 清/a 縣/n 小/a 百花/n 越劇團/n ,/wd 在/p 團里/n 唱/v 小生/n _

結(jié)巴中文分詞的結(jié)果是:

祖籍/n浙江省/ns溫州市/ns,/x1975/m年/m2/m月/m28/m日出/v生于/v浙江/ns溫州/ns,/x歌手/n。/x1987/m年/m考上/v浙江/ns溫州/ns清縣/ns小/n百花/n越劇團/nt,/x在/p團里/n唱/v小生/n(分詞及詞性標(biāo)注完成,耗時:1.96300005913秒)

測試二:

測試的語句是:工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機等技術(shù)性器件的安裝工作

NLPIR/ICTCLAS2013的結(jié)果是:

工/n 信/n 處女/n 干事/n 每月/r 經(jīng)過/p 下屬/v 科室/n 都/d 要/v 親口/d 交代/v 24/m 口/q 交換機/n 等/udeng 技術(shù)性/n 器件/n 的/ude1 安裝/vn 工作/vn _

結(jié)巴中文分詞的結(jié)果是:

工信處/n女干事/n每月/r經(jīng)過/p下屬/v科室/n都/d要/v親口/n交代/n24/m口/n交換機/n等/u技術(shù)性/n器件/n的/uj安裝/v工作/vn(分詞及詞性標(biāo)注完成,耗時:1.93799996376秒。)

從以上的兩個句子的分詞來看結(jié)巴中文分詞的結(jié)果都略好于NLPIR/ICTCLAS2013的結(jié)果,但是不能排除這兩個是特例的可能性。而且可以看出結(jié)巴中文分詞似乎是采取長詞優(yōu)先的方法所以會在長詞錯分成短詞的情況下性能要好,但是也無法評價如果是其他的實驗條件下這是否是個好的處理方式。

2 安裝Python下的NLPIR/ICTCLAS2014

在32位,Windows7 ,Python2.7下安裝最新的NLPIR/ICTCLAS2014。

具體步驟:

(1)下載鏈接http://ictclas.nlpir.org/downloads

(2)參照安裝流程http://1988eiying.blog.163.com/blog/static/7232177620141233525469/,解壓之后目錄如下:

(3)將【Data】整個文件夾拷貝到【sample】--【pythonsample】下

(4)將【lib】文件夾里的各個型號的dll 拷貝到【pythonsample】 --【nlpir】里,替換原來的舊的dll,文件名字要對應(yīng)更改,如拷過來的是win32下的NLPIR.dll,要對應(yīng)的改成NLPIR32.dll 放到【pythonsample】 --【nlpir】里

(5)打開【pythonsample】里的nlpir.py ,將libFile = \'./nlpir/NLPIR64.dll\' 這一句 里的dll改成對應(yīng)自己系統(tǒng)版本的dll,例如是32位的,就改成libFile= \'./nlpir/NLPIR32.dll\'

(6)將Data,nlpir,__init__.py,nlpir.py拷貝到項目代碼下,運行nlpir.py測試是否可以分詞

(7)在ICTCLAS2014Test.py中import nlpir用于實測,與結(jié)巴中文分詞進行比較

#coding=utf-8

\'\'\'\'\'

Created on 2014-3-19

測試NLPIR/ICTCLAS2014分詞工具

@author: liTC

\'\'\'

import nlpir

import time

t1=time.time()

#f=open("t_with_splitter.txt","r")#讀取文本

#string=f.read().decode("utf-8")

string=\'工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機等技術(shù)性器件的安裝工作\'

words =nlpir.Seg(string) #進行分詞

result="" #記錄最終結(jié)果的變量

for w in words:

result+= w[0]+"/"+w[1]#加詞性標(biāo)注

print result

f=open("t_with_POS_tag.txt","w") #將結(jié)果保存到另一個文檔中

f.write(result)

f.close()

t2=time.time()

print("分詞及詞性標(biāo)注完成,耗時:"+str(t2-t1)+"秒。") #反饋結(jié)果

測試一:

測試的語句是:“祖籍浙江省溫州市,1975年2月28日出生于浙江溫州,歌手。1987年考上浙江溫州清縣小百花越劇團,在團里唱小生?!?/p>

NLPIR/ICTCLAS2014的結(jié)果是:

祖籍/n浙江省/ns溫州市/ns,/wd1975年/t2月/t28日/t出生/vi于/p浙江/ns溫州/ns,/wd歌手/n。/wj1987年/t考上/v浙江/ns溫州/ns清/a縣/n小/a百花/n越劇團/n,/wd在/p團里/n唱/v小生/n。/wj(分詞及詞性標(biāo)注完成,耗時:0.00100016593933秒)

測試二:

測試的語句是:工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機等技術(shù)性器件的安裝工作

NLPIR/ICTCLAS2014的結(jié)果是:

工/n信/n處女/n干事/n每月/r經(jīng)過/p下屬/v科室/n都/d要/v親口/d交代/v24/m口/q交換機/n等/udeng技術(shù)性/n器件/n的/ude1安裝/vn工作/vn(分詞及詞性標(biāo)注完成,耗時:0.00200009346008秒。)

從以上的兩個句子的分詞來看NLPIR/ICTCLAS2014相對于NLPIR/ICTCLAS2013結(jié)果幾乎沒有變化,結(jié)巴中文分詞的結(jié)果都略好于NLPIR/ICTCLAS2014的結(jié)果,但是NLPIR/ICTCLAS2014要比結(jié)巴中文分詞至少快1000倍,如果用于科研結(jié)巴中文分詞或許可以獲得容忍,但是要是用于產(chǎn)品,絕對是選NLPIR/ICTCLAS2014。

三 去停用詞

def StopwordsRm(self,words):

result=\'\'

print words

wordList=[word for word in words.split(\'#\')]

print wordList[:20]

stopwords = {}.fromkeys([ line.rstrip()for line in open(conf.PreConfig.CHSTOPWORDS)])

cleanTokens= [w for w in wordList ifw not in stopwords]

print cleanTokens[:20]

for c in cleanTokens:

result+=c+"#"

print result

returnresult

在這個地方我遇到了一個很煩人的問題,那就是Python的中文解碼問題,在最開始的一個小時里我在在去停用詞之后一直看到的結(jié)果是這樣的:

\\xe3\\x80\\x90/\\xe6\\x97\\xa5\\xe6\\x9c\\x9f/\\xe3\\這種東西沒說的肯定是解碼造成的,于是開始找解決的方法。

后來找到CSDN上http://blog.csdn.net/samxx8/article/details/6286407

感覺說的很詳細,于是便開始嘗試里面介紹的方法。

在經(jīng)過一些嘗試以后我發(fā)現(xiàn),雖然這并不影響最后的得到分詞和去除停用詞的結(jié)果,但是是沒有辦法解決在print wordList[:20]和print cleanTokens[:20]出現(xiàn)的亂碼讓我很不爽。所以我決定繼續(xù)嘗試一下。在網(wǎng)上查找一下這個問題,發(fā)現(xiàn)好像很多人都曾經(jīng)遇到過,并且給出來一些解決方案。從大家的博客內(nèi)容了可以總結(jié)出幾個問題,Python對中文支持不是很好,Python 2.x對中文的支持不好,windows默認字符集下Python2.x經(jīng)常會出現(xiàn)亂碼情況,windows下的eclipse里面寫的python 2.x程序?qū)χ形闹С趾懿缓?。后來我還是找到了解決方案,那就是:

defmdcode(self,str):

for c in (\'utf-8\', \'gbk\', \'gb2312\'):

try:

return str.decode(c).encode( \'utf-8\' )

except:

pass

return \'unknown\'

自動檢測轉(zhuǎn)化,基本上問題上解決了。

四 半角與全角轉(zhuǎn)換

參考的網(wǎng)上的方法( http://www.cnblogs.com/kaituorensheng/p/3554571.html)拿過來用的。

方法就是檢查字符是不是全角的,是全角的就做減法變成半角的。其實我不是很懂,為什么會有全角字符這么bug的東西,給處理帶來了很多麻煩。

def strQ2B(self,ustring):

"""把字符串全角轉(zhuǎn)半角"""

ustring=ustring.decode(\'utf-8\')

rstring = ""

for uchar in ustring:

inside_code=ord(uchar)

if inside_code==0x3000:

inside_code=0x0020

else:

inside_code-=0xfee0

if inside_code<0x0020 or inside_code>0x7e: #轉(zhuǎn)完之后不是半角字符則返回原來的字符

rstring+=uchar.encode(\'utf-8\')

else:

rstring+=(unichr(inside_code)).encode(\'utf-8\')

return rstring

END.

以上就是關(guān)于pos機預(yù)處理什么意思,Python怎么做中文文本預(yù)處理的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機預(yù)處理什么意思的知識,希望能夠幫助到大家!

轉(zhuǎn)發(fā)請帶上網(wǎng)址:http://www.tjfsxbj.com/news/14846.html

你可能會喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 babsan@163.com 舉報,一經(jīng)查實,本站將立刻刪除。