本人初學python代碼不夠規范 望見諒
本段代碼可以完成對文本信息的分詞(標注詞性)、去停用詞、以及存儲到本地TXT文件中
1 # coding:utf-8 2 import re 3 import json 4 import jieba.posseg as pseg 5 import string 6 import datetime 7 import zhon.hanzi 8 import get_comment.SQL 9 10 # 要清洗掉的中文標點 11 ignoring_words = list(zhon.hanzi.punctuation)+list(string.punctuation) 12 # 數據庫表中沒有存儲評論的表名稱 13 ignoring_table = ['phone_info', 'phone_url', 'error_table'] 14 15 16 # 將分詞后的數據儲存到本地 17 def text_save(content, filename, mode='a'): 18 file = open(filename, mode) 19 file.write(str(content)) # 存儲為str格式 20 # 此處為存儲為json格式 21 # js = json.dumps(content) 22 # file.write(js) 23 file.close() 24 25 26 # 獲取數據庫中的評論 27 def get_comments(phones_id, i): 28 mysql = get_comment.SQL.save_mysql() # 調用數據庫操作 29 comment = mysql.read_comment_phone(phones_id, i) 30 for ob in comment: 31 return str((ob[0])) 32 33 34 # 調用jieba分詞包進行分詞 35 def jieba_cut(phones_id, i): 36 comment = get_comments(phones_id, i) 37 comments_dict = dict(pseg.cut(comment)) 38 return comments_dict 39 40 41 # 獲取數據庫中的所有儲存評論信息的表名 42 def get_phone_table(): 43 mysql = get_comment.SQL.save_mysql() 44 phone_id_list = list(mysql.select_all_table('jd')) 45 for table in phone_id_list: 46 if table[0] in ignoring_table: 47 phone_id_list.remove(table) 48 phone_id_list.pop() 49 return phone_id_list 50 51 52 # 調用其他函數完成數據的存儲,格式為txt 53 def save_file(phone_id1): 54 with open('E:\\PythonFile\\tingyongci.txt') as ti: 55 ti_list = list(ti.read()) # 獲取停用詞表(綜合哈工大停用詞詞表) 56 for i in range(1, 1000): 57 with open('E:\\PythonFile\\tingyongci.txt') as ti: 58 ti_list = list(ti.read()) # 獲取停用詞表(綜合哈工大停用詞詞表) 59 for i in range(1, 1000): 60 try: 61 new_dic = {} 62 new_dic1 = jieba_cut(phone_id1, i) 63 for key, value in new_dic1.items(): 64 if key not in ti_list: 65 new_dic[key] = value 66 else: 67 pass 68 except: 69 continue 70 print(new_dic) 71 text_save(new_dic, 'E:\\PythonFile\\jd\\phone\\%s.txt' % phone_id1) 72 print('----------------------id=%s---------------------------' % phone_id) 73 74 75 if __name__ == "__main__": 76 start_time = datetime.datetime.now() 77 phone_table_lists = get_phone_table() 78 for phone_table_name in phone_table_lists: 79 phone_id = re.sub("\D", "", phone_table_name[0]) # 獲取表名中的phone_id 80 save_file(int(phone_id)) 81 print("--------------id=%s--------------" % phone_id) 82 end_time = datetime.datetime.now() 83 print('運行時間:') 84 print(end_time - start_time)
附部分運行后的存儲結果:
注:jieba分詞的詞性表如下:
另附詞性標注表如下:
1. 名詞 (1個一類,7個二類,5個三類)
名詞分為以下子類:
n 名詞
nr 人名
nr1 漢語姓氏
nr2 漢語名字
nrj 日語人名
nrf 音譯人名
ns 地名
nsf 音譯地名
nt 機構團體名
nz 其它專名
nl 名詞性慣用語
ng 名詞性語素
2. 時間詞(1個一類,1個二類)
t 時間詞
tg 時間詞性語素
3. 處所詞(1個一類)
s 處所詞
4. 方位詞(1個一類)
f 方位詞
5. 動詞(1個一類,9個二類)
v 動詞
vd 副動詞
vn 名動詞
vshi 動詞“是”
vyou 動詞“有”
vf 趨向動詞
vx 形式動詞
vi 不及物動詞(內動詞)
vl 動詞性慣用語
vg 動詞性語素
6. 形容詞(1個一類,4個二類)
a 形容詞
ad 副形詞
an 名形詞
ag 形容詞性語素
al 形容詞性慣用語
7. 區別詞(1個一類,2個二類)
b 區別詞
bl 區別詞性慣用語
8. 狀態詞(1個一類)
z 狀態詞
9. 代詞(1個一類,4個二類,6個三類)
r 代詞
rr 人稱代詞
rz 指示代詞
rzt 時間指示代詞
rzs 處所指示代詞
rzv 謂詞性指示代詞
ry 疑問代詞
ryt 時間疑問代詞
rys 處所疑問代詞
ryv 謂詞性疑問代詞
rg 代詞性語素
10. 數詞(1個一類,1個二類)
m 數詞
mq 數量詞
11. 量詞(1個一類,2個二類)
q 量詞
qv 動量詞
qt 時量詞
12. 副詞(1個一類)
d 副詞
13. 介詞(1個一類,2個二類)
p 介詞
pba 介詞“把”
pbei 介詞“被”
14. 連詞(1個一類,1個二類)
c 連詞
cc 並列連詞
15. 助詞(1個一類,15個二類)
u 助詞
uzhe 着
ule 了 嘍
uguo 過
ude1 的 底
ude2 地
ude3 得
usuo 所
udeng 等 等等 雲雲
uyy 一樣 一般 似的 般
udh 的話
uls 來講 來說 而言 說來
uzhi 之
ulian 連 (“連小學生都會”)
16. 嘆詞(1個一類)
e 嘆詞
17. 語氣詞(1個一類)
y 語氣詞(delete yg)
18. 擬聲詞(1個一類)
o 擬聲詞
19. 前綴(1個一類)
h 前綴
20. 后綴(1個一類)
k 后綴
21. 字符串(1個一類,2個二類)
x 字符串
xx 非語素字
xu 網址URL
22. 標點符號(1個一類,16個二類)
w 標點符號
wkz 左括號,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { <
wky 右括號,全角:) 〕 ] } 》 】 〗 〉 半角: ) ] { >
wyz 左引號,全角:“ ‘ 『
wyy 右引號,全角:” ’ 』
wj 句號,全角:。
ww 問號,全角:? 半角:?
wt 嘆號,全角:! 半角:!
wd 逗號,全角:, 半角:,
wf 分號,全角:; 半角: ;
wn 頓號,全角:、
wm 冒號,全角:: 半角: :
ws 省略號,全角:…… …
wp 破折號,全角:—— -- ——- 半角:--- ----
wb 百分號千分號,全角:% ‰ 半角:%
wh 單位符號,全角:¥ $ £ ° ℃ 半角:$