TM04 Chinese word segmentation
1. 中文斷詞基礎流程
1.1 載入資料
with open("data/blessing.txt", encoding="utf8") as fin:
text = fin.read()
print(type(fin))
print(type(text))
print("Number of characters: %d" % len(text))
print(text[:int(len(text)/10)])
1.2 斷句
在斷句前先清除每個段落前的首行縮排(兩個全形空白)。並且取代換行符號(要注意並不是每次都先取代換行符號,比方說你可以比較一下這章節所用的文本和PTT文章在斷句上的差異)。
text_refined = text.replace(" ", "").replace("\n", "")
sentences = text_refined.split("。")
print("Number of sentences: %d" % len(sentences))
print(sentences[:20])['舊曆的年底畢竟最像年底,村鎮上不必說,就在天空中也顯出將到新年的氣象來', '灰白色的沉重的晚雲中間時時發出閃光,接著一聲鈍響,是送竈的爆竹;近處燃放的可就更強烈了,震耳的大音還沒有息,空氣裏已經散滿了幽微的火藥香', '我是正在這一夜回到我的故鄉魯鎮的', '雖說故鄉,然而已沒有家,所以只得暫寓在魯四老爺的宅子裏', '他是我的本家,比我長一輩,應該稱之曰「四叔」,是一個講理學的老監生', '他比先前並沒有甚麽大改變,單是老了些,但也還未留鬍子,一見面是寒暄,寒暄之後說我「胖了」,說我「胖了」之後即大罵其新黨', '但我知道,這並非借題在罵我:因為他所罵的還是康有為', '但是,談話是總不投機的了,於是不多久,我便一個人剩在書房裏', '第二天我起得很遲,午飯之後,出去看了幾個本家和朋友;第三天也照樣', '他們也都沒有甚麽大改變,單是老了些;家中卻一律忙,都在準備著「祝福」', '這是魯鎮年終的大典,致敬盡禮,迎接福神,拜求來年一年中的好運氣的', '殺雞,宰鵝,買豬肉,用心細細的洗,女人的臂膊都在水裏浸得通紅,有的還帶著絞絲銀鐲子', '煮熟之後,橫七豎八的插些筷子在這類東西上,可就稱為「福禮」了,五更天陳列起來,並且點上香燭,恭請福神們來享用,拜的卻只限於男人,拜完自然仍然是放爆竹', '年年如此,家家如此,——只要買得起福禮和爆竹之類的——今年自然也如此', '天色愈陰暗了,下午竟下起雪來,雪花大的有梅花那麽大,滿天飛舞,夾著煙靄和忙碌的氣色,將魯鎮亂成一團糟', '我回到四叔的書房裏時,瓦楞上已經雪白,房裏也映得較光明,極分明的顯出壁上掛著的朱拓的大「壽」字,陳摶老祖寫的,一邊的對聯已經脫落,鬆鬆的卷了放在長桌上,一邊的還在,道是「事理通達心氣和平」', '我又無聊賴的到窗下的案頭去一翻,只見一堆似乎未必完全的《康熙字典》,一部《近思錄集註》和一部《四書襯》', '無論如何、我明天決計要走了', '況且,一直到昨天遇見祥林嫂的事,也就使我不能安住', '那是下午,我到鎮的東頭訪過一個朋友,走出來,就在河邊遇見她;而且見她瞪著的眼睛的視線,就知道明明是向我走來的']
Number of sentences: 2731.3 斷詞
舊曆的年底畢竟最像年底,村鎮上不必說,就在天空中也顯出將到新年的氣象來
<generator object Tokenizer.cut at 0X114658d50>
['舊曆', '的', '年底', '畢竟', '最', '像', '年底', ',', '村鎮', '上', '不必', '說', ',', '就', '在', '天空', '中', '也', '顯出', '將到', '新年', '的', '氣象', '來']
舊曆 / 的 / 年底 / 畢竟 / 最 / 像 / 年底 / , / 村鎮 / 上 / 不必 / 說 / , / 就 / 在 / 天空 / 中 / 也 / 顯出 / 將到 / 新年 / 的 / 氣象 / 來
台北市 / 長 / 柯文 / 哲
2. 繁簡斷詞效果比較
jieba套件在繁簡兩種字體的斷詞效果差不少,必須要謹慎考量。但若要用結巴,比較好的方法應該是先轉為簡體,然後用簡體斷詞的位置來斷開繁體句子。
2.1 繁簡互換
繁轉簡,問題不大,但簡又轉回繁,幾乎跟原本的繁體字意義都不同了。
台北市长柯文哲
颱北市長柯文哲
2.2 繁簡斷詞結果比較
台北市 / 長 / 柯文 / 哲 # 直接斷繁體
台北 / 市长 / 柯文 / 哲 # 直接斷簡體
舊曆 / 的 / 年底 / 畢竟 / 最像 / 年底 / , / 村鎮 / 上 / 不必 / 說 / , / 就 / 在 / 天空 / 中 / 也 / 顯齣 / 將 / 到 / 新年 / 的 / 氣象 / 來
旧历 / 的 / 年底 / 毕竟 / 最像 / 年底 / , / 村镇 / 上 / 不必 / 说 / , / 就 / 在 / 天空 / 中 / 也 / 显出 / 将 / 到 / 新年 / 的 / 气象 / 来
國民黨 / 高雄市 / 長 / 候選人 / 韓國瑜 / 今天 / 晚上 / 開 / 直播 / , / 針對 / 最近 / 引起 / 爭議 / 的 / 一些 / 事 / 說明 / , / 強調 / 他 / 並沒有 / 消費 / 愛心 / 菜販 / 陳樹菊 / , / 全力支持 / 「 / 館長 / 」 / 做 / 公益 / , / 所謂 / 高雄 / 三鳳 / 宮靈 / 籤 / 可能 / 是 / 「 / 新型 / 態選舉 / 詐騙 / 」 / ; / 至於 / 為 / 強調 / 招商 / 引資 / 說 / 出 / 「 / 陪 / 睡 / 」 / 遭批 / , / 他 / 以後不會 / 說 / 這麼 / 有 / 張力 / 的 / 用語 / , / 畢 / 竟是 / 市長 / 候選人 / 。
國民黨 / 高雄市 / 長 / 候選人 / 韓國 / 瑜 / 今天 / 晚上 / 開 / 直播 / , / 針對 / 最近 / 引起爭議 / 的 / 一些 / 事 / 說明 / , / 強調 / 他 / 並 / 沒有 / 消費 / 愛心 / 菜販 / 陳樹菊 / , / 全力支持 / 「 / 館長 / 」 / 做 / 公益 / , / 所謂 / 高雄 / 三鳳宮 / 靈簽 / 可能 / 是 / 「 / 新型 / 態 / 選舉 / 詐騙 / 」 / ; / 至於 / 為 / 強調 / 招商引資 / 說齣 / 「 / 陪 / 睡 / 」 / 遭批 / , / 他 / 以後 / 不會 / 說 / 這麼 / 有 / 張力 / 的 / 用語 / , / 畢竟 / 是 / 市長 / 候選人 / 。
国民党 / 高雄市 / 长 / 候选人 / 韩国 / 瑜 / 今天 / 晚上 / 开 / 直播 / , / 针对 / 最近 / 引起争议 / 的 / 一些 / 事 / 说明 / , / 强调 / 他 / 并 / 没有 / 消费 / 爱心 / 菜贩 / 陈树菊 / , / 全力支持 / 「 / 馆长 / 」 / 做 / 公益 / , / 所谓 / 高雄 / 三凤宫 / 灵签 / 可能 / 是 / 「 / 新型 / 态 / 选举 / 诈骗 / 」 / ; / 至于 / 为 / 强调 / 招商引资 / 说出 / 「 / 陪 / 睡 / 」 / 遭批 / , / 他 / 以后 / 不会 / 说 / 这么 / 有 / 张力 / 的 / 用语 / , / 毕竟 / 是 / 市长 / 候选人 / 。
2.3 用簡體斷詞位置切割繁體字詞
方法一(推薦)
['國民黨', '高雄市', '長', '候選人', '韓國', '瑜', '今天', '晚上', '開', '直播', ',', '針對', '最近', '引起爭議', '的', '一些', '事', '說明', ',', '強調', '他', '並', '沒有', '消費', '愛心', '菜販', '陳樹菊', ',', '全力支持', '「', '館長', '」', '做', '公益', ',', '所謂', '高雄', '三鳳宮', '靈籤', '可能', '是', '「', '新型', '態', '選舉', '詐騙', '」', ';', '至於', '為', '強調', '招商引資', '說出', '「', '陪', '睡', '」', '遭批', ',', '他', '以後', '不會', '說', '這麼', '有', '張力', '的', '用語', ',', '畢竟', '是', '市長', '候選人', '。']
方法一(測試二)
國民黨 / 高雄市 / 長 / 候選人 / 韓國瑜 / 今天 / 晚上 / 開 / 直播 / , / 針對 / 最近 / 引起 / 爭議 / 的 / 一些 / 事 / 說明 / , / 強調 / 他 / 並沒有 / 消費 / 愛心 / 菜販 / 陳樹菊 / , / 全力支持 / 「 / 館長 / 」 / 做 / 公益 / , / 所謂 / 高雄 / 三鳳 / 宮靈 / 籤 / 可能 / 是 / 「 / 新型 / 態選舉 / 詐騙 / 」 / ; / 至於 / 為 / 強調 / 招商 / 引資 / 說 / 出 / 「 / 陪 / 睡 / 」 / 遭批 / , / 他 / 以後不會 / 說 / 這麼 / 有 / 張力 / 的 / 用語 / , / 畢 / 竟是 / 市長 / 候選人 / 。
國民黨/ 高雄市/ 長/ 候選人/ 韓國/ 瑜/ 今天/ 晚上/ 開/ 直播/ ,/ 針對/ 最近/ 引起爭議/ 的/ 一些/ 事/ 說明/ ,/ 強調/ 他/ 並/ 沒有/ 消費/ 愛心/ 菜販/ 陳樹菊/ ,/ 全力支持/ 「/ 館長/ 」/ 做/ 公益/ ,/ 所謂/ 高雄/ 三鳳宮/ 靈籤/ 可能/ 是/ 「/ 新型/ 態/ 選舉/ 詐騙/ 」/ ;/ 至於/ 為/ 強調/ 招商引資/ 說出/ 「/ 陪/ 睡/ 」/ 遭批/ ,/ 他/ 以後/ 不會/ 說/ 這麼/ 有/ 張力/ 的/ 用語/ ,/ 畢竟/ 是/ 市長/ 候選人/ 。
方法二
舊曆的年底畢竟最像年底,村鎮上不必說,就在天空中也顯出將到新年的氣象來
['舊曆', '的', '年底', '畢竟', '最像', '年底', ',', '村鎮', '上', '不必', '說', ',', '就', '在', '天空', '中', '也', '顯出', '將', '到', '新年', '的', '氣象', '來']
['舊曆', '的', '年底', '畢竟', '最像', '年底', ',', '村鎮', '上', '不必', '說', ',', '就', '在', '天空', '中', '也', '顯齣', '將', '到', '新年', '的', '氣象', '來']
(Option) 斷詞效果的測試工具
3. POS、停用詞、標點符號去除
jieba使用者自定義詞典
舊曆 / 的 / 年底 / 畢竟 / 最 / 像 / 年底 / , / 村鎮 / 上 / 不必 / 說 / , / 就 / 在 / 天空 / 中 / 也 / 顯出 / 將到 / 新年 / 的 / 氣象 / 來
國民黨 / 高雄市 / 長 / 候選人 / 韓國瑜 / 今天 / 晚上 / 開 / 直播 / , / 針對 / 最近 / 引起 / 爭議 / 的 / 一些 / 事 / 說明 / , / 強調 / 他 / 並沒有 / 消費 / 愛心 / 菜販 / 陳樹菊 / , / 全力支持 / 「 / 館長 / 」 / 做 / 公益 / , / 所謂 / 高雄 / 三鳳宮 / 靈籤 / 可能 / 是 / 「 / 新型 / 態選舉 / 詐騙 / 」 / ; / 至於 / 為 / 強調 / 招商 / 引資 / 說 / 出 / 「 / 陪 / 睡 / 」 / 遭批 / , / 他 / 以後不會 / 說 / 這麼 / 有 / 張力 / 的 / 用語 / , / 畢 / 竟是 / 市長 / 候選人 / 。
標記POS
[pair('國民黨', 'nt'), pair('高雄市', 'ns'), pair('長候', 'n'), pair('選人', 'n'), pair('韓國瑜', 'x'), pair('今天', 't'), pair('晚上', 't'), pair('開', 'zg'), pair('直播', 'vn'), pair(',', 'x'), pair('針對', 'p'), pair('最近', 'f'), pair('引起', 'v'), pair('爭議', 'n'), pair('的', 'uj'), pair('一些', 'm'), pair('事', 'n'), pair('說', 'v'), pair('明', 't'), pair(',', 'x'), pair('強調', 'v'), pair('他', 'r'), pair('並', 'c'), pair('沒有', 'v'), pair('消費', 'vn'), pair('愛心', 'n'), pair('菜販', 'n'), pair('陳樹菊', 'x'), pair(',', 'x'), pair('全力支持', 'n'), pair('「', 'x'), pair('館長', 'n'), pair('」', 'x'), pair('做', 'v'), pair('公益', 'n'), pair(',', 'x'), pair('所謂', 'b'), pair('高雄', 'n'), pair('三鳳宮', 'x'), pair('靈籤', 'x'), pair('可能', 'v'), pair('是', 'v'), pair('「', 'x'), pair('新型', 'b'), pair('態', 'n'), pair('選舉', 'v'), pair('詐騙', 'vn'), pair('」', 'x'), pair(';', 'x'), pair('至於', 'i'), pair('為', 'p'), pair('強調', 'v'), pair('招商', 'n'), pair('引資說', 'l'), pair('出', 'v'), pair('「', 'x'), pair('陪', 'v'), pair('睡', 'v'), pair('」', 'x'), pair('遭批', 'v'), pair(',', 'x'), pair('他', 'r'), pair('以', 'p'), pair('後', 'nr'), pair('不', 'd'), pair('會', 'v'), pair('說', 'v'), pair('這麼', 'r'), pair('有', 'v'), pair('張力', 'nr'), pair('的', 'uj'), pair('用語', 'n'), pair(',', 'x'), pair('畢', 'zg'), pair('竟是', 'd'), pair('市長候', 'n'), pair('選人', 'n'), pair('。', 'x')]
國民黨 nt
高雄市 ns
長候 n
選人 n
韓國瑜 x
今天 t
晚上 t
開 zg
...
去除標點符號並計算詞頻
Removing punctuation marks with the information of unicode category: https://en.wikipedia.org/wiki/Unicode_character_property
['Ps', 'Ps', 'Po', 'Po', 'Po', 'Lo', 'Lo', 'Lo', 'Lo']
[('的', 345), ('了', 197), ('她', 155), ('我', 88), ('是', 86), ('也', 77), ('說', 65), ('在', 61), ('來', 57), ('就', 56), ('裏', 54), ('有', 46), ('麽', 45), ('不', 37), ('祥林嫂', 35), ('又', 34), ('一個', 33), ('你', 33), ('去', 32), ('他', 28)]
刪去停用詞
Manipulate a Chinese stopword list.
What is "U+FEFF"? The Unicode character U+FEFF is the byte order mark, or BOM, and is used to tell the difference between big- and little-endian UTF-16 encoding. If you decode the web page using the right codec, Python will remove it for you. Examples:
Sol. 1. Add stop words temporarily
Sol. 2. Add stop words from files
Remove stop words
Using CKIPTagger
CKIPTagger在沒有GPU資源時非常的慢,所以即使有CPU,跑起來也不快。
他是用bi-lstm,所以要先安裝tensorflow,版本大於1.14,小於2,那就是1.15
Last updated