導航:首頁 > 編程語言 > Python統計更新單詞詞頻字典

Python統計更新單詞詞頻字典

發布時間:2022-05-15 20:10:36

1. 如何用python實現英文短文的雙詞頻統計

簡單版:

#!/usr/bin/envpython3
importre
importjieba
fromcollectionsimportCounter

fname='counttest.txt'
withopen(fname)asf:
s=f.read()
pattern=re.compile(r'[a-zA-Z]+-?[a-zA-Z]*')
english_words=Counter(pattern.findall(s))
other_words=Counter(jieba.cut(pattern.sub('',s)))
print(' 英文單詞統計結果: '+'-'*17)
print(' '.join(['{}:{}'.format(i,j)fori,jinenglish_words.most_common()]))
print(' 中文及符號統計結果: '+'-'*19)
print(' '.join(['{}:{}'.format(i,j)fori,jinother_words.most_common()]))

復雜版:

#!/usr/bin/envpython
#-*-coding:utf-8-*-
from__future__importprint_function,division,unicode_literals
importsys,re,time,os,jieba
fromcollectionsimportCounter
fromdatetimeimportdatetime

classWordCounter(object):
def__init__(self,from_file,to_file=None,coding=None,jieba_cut=None):
'''根據設定的進程數,把文件from_file分割成大小基本相同,數量等同與進程數的文件段,
來讀取並統計詞頻,然後把結果寫入to_file中,當其為None時直接列印在終端或命令行上。
Args:
@from_file要讀取的文件
@to_file結果要寫入的文件
@coding文件的編碼方式,默認為採用chardet模塊讀取前1萬個字元來自動判斷
@jieba_cut是否啟用結巴分詞,默認為None

Howtouse:
w=WordCounter('a.txt','b.txt')
w.run()
'''
ifnotos.path.isfile(from_file):
raiseException('Nosuchfile:文件不存在')
self.f1=from_file
self.filesize=os.path.getsize(from_file)
self.f2=to_file

ifcodingisNone:
try:
importchardet
exceptImportError:
os.system('pipinstallchardet')
print('-'*70)
importchardet
withopen(from_file,'rb')asf:
coding=chardet.detect(f.read(10000))['encoding']
self.coding=coding
self._c=[Counter(),Counter()]
self.jieba=False
ifjieba_cutisnotNone:
self.jieba=True

defrun(self):
start=time.time()
if1:
self.count_direct(self.f1)
ifself.f2notin['None','Null','none','null',None]:
withopen(self.f2,'wb')asf:
f.write(self.result.encode(self.coding))
else:
print(' Englishwords: '+'-'*15)
print(self.result)
cost='{:.1f}'.format(time.time()-start)
size=humansize(self.filesize)
tip=' Filesize:{}.Costtime:{}seconds'
#print(tip.format(size,cost))
self.cost=cost+'s'

defcount_direct(self,from_file):
'''直接把文件內容全部讀進內存並統計詞頻'''
start=time.time()
withopen(from_file,'rb')asf:
line=f.read()
foriinrange(len(self._c)):
self._c[i].update(self.parse(line)[i])


defparse(self,line):#解析讀取的文件流
text=line.decode(self.coding)
text=re.sub(r'- ','',text)#考慮同一個單詞被分割成兩段的情況,刪除行末的-號
pattern=re.compile(r'[a-zA-Z]+-?[a-zA-Z]*')#判斷是否為英文單詞
english_words=pattern.findall(text)
rest=pattern.sub('',text)
ex=Counter(jieba.cut(rest))ifself.jiebaelseCounter(text)
returnCounter(english_words),ex

defflush(self):#清空統計結果
self._c=[Counter(),Counter()]

@property
defcounter(self):#返回統計結果的Counter類
returnself._c

@property
defresult(self):#返回統計結果的字元串型式,等同於要寫入結果文件的內容
ss=[]
forcinself._c:
ss.append(['{}:{}'.format(i,j)fori,jinc.most_common()])

tip=' 中文及符號統計結果: '+'-'*15+' '
returntip.join([' '.join(s)forsinss])

defhumansize(size):
"""將文件的大小轉成帶單位的形式
>>>humansize(1024)=='1KB'
True
>>>humansize(1000)=='1000B'
True
>>>humansize(1024*1024)=='1M'
True
>>>humansize(1024*1024*1024*2)=='2G'
True
"""
units=['B','KB','M','G','T']
forunitinunits:
ifsize<1024:
break
size=size//1024
return'{}{}'.format(size,unit)

defmain():
iflen(sys.argv)<2:
print('Usage:pythonwordcounter.pyfrom_fileto_file')
exit(1)
from_file,to_file=sys.argv[1:3]
args={'coding':None,'jieba_cut':1}
foriinsys.argv:
forkinargs:
ifre.search(r'{}=(.+)'.format(k),i):
args[k]=re.findall(r'{}=(.+)'.format(k),i)[0]
w=WordCounter(from_file,to_file,**args)
w.run()


if__name__=='__main__':
importdoctest
doctest.testmod()
main()

更復雜的:如果是比較大的文件,建議採用多進程,詳情網路:多進程讀取大文件並統計詞頻 jaket5219999

2. Python詞頻統計問題

#下載一文到words.txt,內容為(stumldsmlstustueezkzwxjZkzWxj)

File="words.txt"
number_list=[]
withopen(File)asf:
forlineinf:
number_list.extend(str(i)foriinline.split())
foriteminset(number_list):
L=[item,number_list.index(item),number_list.count(item)]
print(L)#單詞首次出現的位置詞頻
withopen('Q1.txt','a')asF:
F.writelines(str(L))

3. 如何用python統計一個txt文件中某個單詞出現的次數

1、首先,定義一個變數,保存要統計的英文文章。

4. python,字元串怎麼統計單詞個數

如果你是指一串單詞,空格隔開的,統計詞頻,就用列表和字典來。
比如輸入的是這樣:this one ok this one two three go end at end
dic1={}
n=input().split()
for i in n:
縮進if i in dic1:dic1[i]+=1
縮進else:dic1[i]=1
print(dic1)

5. 如何用python對文章中文分詞並統計詞頻

1、全局變數在函數中使用時需要加入global聲明
2、獲取網頁內容存入文件時的編碼為ascii進行正則匹配時需要decode為GB2312,當匹配到的中文寫入文件時需要encode成GB2312寫入文件。
3、中文字元匹配過濾正則表達式為ur'[\u4e00-\u9fa5]+',使用findall找到所有的中文字元存入分組
4、KEY,Value值可以使用dict存儲,排序後可以使用list存儲
5、字元串處理使用split分割,然後使用index截取字元串,判斷哪些是名詞和動詞
6、命令行使用需要導入os,os.system(cmd)

6. Python 分詞後詞頻統計


out_one=re.compile(r'(.*?)00',re.S)

out_one_re=re.findall(self.out_one,i)


a={}
forjinout_one_re:
a[j]=out_one_re.count(j)


使用字典屬性,內容唯一來進行統計。出來的包括內容和次數。

7. 你好 想用Python做一個英文單詞詞頻統計軟體,將當前目錄下的所有txt文檔讀進去,然後生成一個excel文檔

#!/usr/bin/env python
dic={}
for i in open('data.txt'):
array=[]
i=i.strip()
array=i.split()
for j in array:
if not dic.has_key(j):
dic[j]=0
dic[j]+=1

for i in dic.keys():
print i,dic[i]

8. Python中,已經得到一個包含所有單詞的詞典,如何統計詞典中的單詞在每一句話中出現的次數

眾所周知,英文是以詞為單位的,詞和詞之間是靠空格隔開,而中文是以字為單位,句子中所有的字連起來才能描述一個意思。例如,英文句子I am a student,用中文則為:「我是一個學生」。計算機可以很簡單通過空格知道student是一個單詞,但是不能很容易明白「學」、「生」兩個字合起來才表示一個詞。把中文的漢字序列切分成有意義的詞,就是中文分詞,有些人也稱為切詞。我是一個學生,分詞的結果是:我 是 一個 學生。
中文分詞技術屬於自然語言處理技術范疇,對於一句話,人可以通過自己的知識來明白哪些是詞,哪些不是詞,但如何讓計算機也能理解?其處理過程就是分詞演算法

現有的分詞演算法可分為三大類:基於字元串匹配的分詞方法、基於理解的分詞方法和基於統計的分詞方法。

1、基於字元串匹配的分詞方法

這種方法又叫做機械分詞方法,它是按照一定的策略將待分析的漢字串與一個「充分大的」機器詞典中的詞條進行配,若在詞典中找到某個字元串,則匹配成功(識別出一個詞)。按照掃描方向的不同,串匹配分詞方法可以分為正向匹配和逆向匹配;按照不同長度優先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配;按照是否與詞性標注過程相結合,又可以分為單純分詞方法和分詞與標注相結合的一體化方法。常用的幾種機械分詞方法如下:

1)正向最大匹配法(由左到右的方向);

2)逆向最大匹配法(由右到左的方向);

3)最少切分(使每一句中切出的詞數最小)。

還可以將上述各種方法相互組合,例如,可以將正向最大匹配方法和逆向最大匹配方法結合起來構成雙向匹配法。由於漢語單字成詞的特點,正向最小匹配和逆向最小匹配一般很少使用。一般說來,逆向匹配的切分精度略高於正向匹配,遇到的歧義現象也較少。統計結果表明,單純使用正向最大匹配的錯誤率為1/169,單純使用逆向最大匹配的錯誤率為1/245。但這種精度還遠遠不能滿足實際的需要。實際使用的分詞系統,都是把機械分詞作為一種初分手段,還需通過利用各種其它的語言信息來進一步提高切分的准確率。

一種方法是改進掃描方式,稱為特徵掃描或標志切分,優先在待分析字元串中識別和切分出一些帶有明顯特徵的詞,以這些詞作為斷點,可將原字元串分為較小的串再來進機械分詞,從而減少匹配的錯誤率。另一種方法是將分詞和詞類標注結合起來,利用豐富的詞類信息對分詞決策提供幫助,並且在標注過程中又反過來對分詞結果進行檢驗、調整,從而極大地提高切分的准確率。

對於機械分詞方法,可以建立一個一般的模型,在這方面有專業的學術論文,這里不做詳細論述。

2、基於理解的分詞方法

這種分詞方法是通過讓計算機模擬人對句子的理解,達到識別詞的效果。其基本思想就是在分詞的同時進行句法、語義分析,利用句法信息和語義信息來處理歧義現象。它通常包括三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義信息來對分詞歧義進行判斷,即它模擬了人對句子的理解過程。這種分詞方法需要使用大量的語言知識和信息。由於漢語語言知識的籠統、復雜性,難以將各種語言信息組織成機器可直接讀取的形式,因此目前基於理解的分詞系統還處在試驗階段。

3、基於統計的分詞方法

從形式上看,詞是穩定的字的組合,因此在上下文中,相鄰的字同時出現的次數越多,就越有可能構成一個詞。因此字與字相鄰共現的頻率或概率能夠較好的反映成詞的可信度。可以對語料中相鄰共現的各個字的組合的頻度進行統計,計算它們的互現信息。定義兩個字的互現信息,計算兩個漢字X、Y的相鄰共現概率。互現信息體現了漢字之間結合關系的緊密程度。當緊密程度高於某一個閾值時,便可認為此字組可能構成了一個詞。這種方法只需對語料中的字組頻度進行統計,不需要切分詞典,因而又叫做無詞典分詞法或統計取詞方法。但這種方法也有一定的局限性,會經常抽出一些共現頻度高、但並不是詞的常用字組,例如「這一」、「之一」、「有的」、「我的」、「許多的」等,並且對常用詞的識別精度差,時空開銷大。實際應用的統計分詞系統都要使用一部基本的分詞詞典(常用詞詞典)進行串匹配分詞,同時使用統計方法識別一些新的詞,即將串頻統計和串匹配結合起來,既發揮匹配分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優點。

到底哪種分詞演算法的准確度更高,目前並無定論。對於任何一個成熟的分詞系統來說,不可能單獨依靠某一種演算法來實現,都需要綜合不同的演算法。筆者了解,海量科技的分詞演算法就採用「復方分詞法」,所謂復方,相當於用中葯中的復方概念,即用不同的葯才綜合起來去醫治疾病,同樣,對於中文詞的識別,需要多種演算法來處理不同的問題。

9. 用Python統計詞頻

def statistics(astr):
# astr.replace("\n", "")
slist = list(astr.split("\t"))
alist = []
[alist.append(i) for i in slist if i not in alist]
alist[-1] = alist[-1].replace("\n", "")
return alist

if __name__ == "__main__":
code_doc = {}
with open("test_data.txt", "r", encoding='utf-8') as fs:
for ln in fs.readlines():
l = statistics(ln)
for t in l:
if t not in code_doc:
code_doc.setdefault(t, 1)
else:
code_doc[t] += 1

for keys in code_doc.keys():
print(keys + ' ' + str(code_doc[keys]))

10. 如何用python和jieba分詞,統計詞頻

#!python3
#-*-coding:utf-8-*-
importos,codecs
importjieba
fromcollectionsimportCounter

defget_words(txt):
seg_list=jieba.cut(txt)
c=Counter()
forxinseg_list:
iflen(x)>1andx!=' ':
c[x]+=1
print('常用詞頻度統計結果')
for(k,v)inc.most_common(100):
print('%s%s%s%d'%(''*(5-len(k)),k,'*'*int(v/3),v))

if__name__=='__main__':
withcodecs.open('19d.txt','r','utf8')asf:
txt=f.read()
get_words(txt)

閱讀全文

與Python統計更新單詞詞頻字典相關的資料

熱點內容
java聊天窗口 瀏覽:976
單片機控制陣列led燈 瀏覽:577
白鹿用的什麼APP修圖 瀏覽:499
阿里雲輕量應用伺服器ssh無法連接 瀏覽:794
員工福利系統源碼 瀏覽:982
數據加密如何設置 瀏覽:570
php取余運算 瀏覽:153
php如何壓縮圖片大小 瀏覽:137
編程三階教程 瀏覽:983
pdf顏色查看 瀏覽:469
怎麼用指令停用命令方塊java 瀏覽:406
滑鼠命令行 瀏覽:567
如何朗讀pdf 瀏覽:746
壓縮機啟動後繼電器發燙 瀏覽:405
小學編程項目學習 瀏覽:557
net編譯運行原理 瀏覽:786
加密電腦的文件拷出來打不開 瀏覽:366
可達性演算法根 瀏覽:208
ibm的伺服器怎麼安裝系統 瀏覽:492
pdftomobi在線 瀏覽:797