準備資料

讀取資料
with open("./斗羅大陸.txt",encoding="utf8") as f:
content = f.read()
f.close()
查看資料

在這里我只查看了前10000字,如果全部查看會把我的jupyter弄宕機,就只有選取少量的來看,確認沒錯就行了
用jieba自帶的詞庫來進行分詞
import jieba
print('/'.join(jieba.cut(content[:10000])))

我們知道在小說中佛怒唐蓮是一個詞,而他自帶的詞庫會將他分為兩個詞,所以是不準確的,接下來我們用自己的詞庫進行測驗
查看詞庫

可以看到我們自己的詞庫中有佛怒唐蓮(如果沒有就自己加)
使用自己的詞庫
import jieba
jieba.load_userdict('./詞庫.txt')
print('/'.join(jieba.cut(content[:10000])))
可能出現的問題:這里可能會提示你需要使用utf-8格式編碼
那么我們轉一次格式就可以了
1)找到我們的詞庫txt檔案并打開它

2)如圖,點擊檔案->另存為

選擇utf-8格式然后保存就行了
結果

這樣佛怒唐蓮就被分成了一個詞了
停用詞
stop_word = pd.read_csv("./停用詞.txt",names=['w'],sep='aaa',encoding='utf-8')
finish_words=[]
for i in word_cut_own_dict:
if i not in stop_word.w.tolist()+[" ","\n"]:
finish_words.append(i)
這里的word_cut_own_dict是用我們的詞庫將content切分后形成的串列
word_cut_own_dict=list(jieba.cut(content))
最后效果:

生成詞云
from wordcloud import WordCloud
from PIL import Image
import numpy as np
maskIm=Image.open('./bg.jpg')
wc = WordCloud(
width=800,
height=600,
mask=np.array(maskIm),
min_font_size=0,
max_font_size=200,
font_path= 'C:\Windows\Fonts\STXINGKA.TTF',)
wc.generate(' '.join(finish_words))
wc.to_image()

如果你想知道具體這些詞出現了多少次,很簡單,我們把串列轉成Series然后value_counts()就可以看到了
pd.Series(finish_words).value_counts()

進階,尋找段落
這里我就只給代碼了,差點Die here
def find_paragraph_line(table):
para_index = []
paragraph=[]
for index,text in enumerate(table.text):
if "第" and "章 " in text.strip():
paragraph.append(text)
para_index.append(index)
return para_index,paragraph
def find_page(para): # para為串列
for index,page in enumerate(para):
length = page.index("章")
concat=""
for i in range(0,page.index("章")):
concat+=page[length]
length-=1
if page[length]=="第":
para[index]=concat[::-1][:-1]
break
para_index,paragraph=find_paragraph_line(content_table)
find_page(paragraph)
paraData=pd.DataFrame(paragraph,index=para_index,columns=['章節數'])
paraDataGroup = paraData.groupby("章節數")
paraData["章節數"][-3:]=['三百三十四', '三百三十五', '三百三十六'] # 修改錯誤資料
paraData[paraData["章節數"]=='弟二百八十六章 昊天宗神技,大須彌錘']="二百八十六章"
new_para=paraData.drop_duplicates(keep='first') # 洗掉重復資料
# 用后一個減去前一個加一就可知該數應該生成多少個
showedMake=[]
for i in range(0,len(new_para.index)-1):
showedMake.append(new_para.index[i+1]-new_para.index[i])
showedMake.append(content_table.index[-1]-new_para.index[-1]+1)
paraNum=new_para['章節數'].tolist()
Final=[]
for i in range(paraData.index[0]):
Final.append("零")
for index,count in enumerate(showedMake):
for j in range(0,count):
Final.append(paraNum[index])
content_table['paragraph']=Final
content_table
由于一直在想下一步,注釋寫得少,
若有疑問,歡迎評論
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/274070.html
標籤:python
上一篇:上手Pandas,帶你玩轉資料(5)-- 資料轉換與資料定位
下一篇:python英雄聯盟萬圖視頻制作
