用python进行精细中文分句(基于正则表达式)
生活随笔
收集整理的這篇文章主要介紹了
用python进行精细中文分句(基于正则表达式)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
??????中文分句,乍一看是一個(gè)挺簡單的工作,一般我們只要找到一個(gè)【。!?】這類的典型斷句符斷開就可以了嗎。
??????對于簡單的文本這個(gè)做法是已經(jīng)可行了(比如我看到這篇文章里有個(gè)簡潔的實(shí)現(xiàn)方法:自然語言處理學(xué)習(xí)3:中文分句re.split(),jieba分詞和詞頻統(tǒng)計(jì)FreqDist)
?????? 然而當(dāng)我處理小說文本時(shí),發(fā)現(xiàn)了這種思路的漏洞:
- 對于有雙引號(hào)的句子,分句結(jié)果應(yīng)該延后到雙引號(hào)結(jié)束后,比如:
玄德幼時(shí),與鄉(xiāng)中小兒戲于樹下,曰:“我為天子,當(dāng)乘此車蓋。”
- 省略號(hào)也是常見的句子分隔符,然而它超過了一個(gè)字符,用re.split()的方法就略有不便。
所以,這里我提供一個(gè)更加精細(xì)的解決方法,可以解決上面的問題:
# 版本為python3,如果為python2需要在字符串前面加上u import re def cut_sent(para):para = re.sub('([。!?\?])([^”’])', r"\1\n\2", para) # 單字符斷句符para = re.sub('(\.{6})([^”’])', r"\1\n\2", para) # 英文省略號(hào)para = re.sub('(\…{2})([^”’])', r"\1\n\2", para) # 中文省略號(hào)para = re.sub('([。!?\?][”’])([^,。!?\?])', r'\1\n\2', para)# 如果雙引號(hào)前有終止符,那么雙引號(hào)才是句子的終點(diǎn),把分句符\n放到雙引號(hào)后,注意前面的幾句都小心保留了雙引號(hào)para = para.rstrip() # 段尾如果有多余的\n就去掉它# 很多規(guī)則中會(huì)考慮分號(hào);,但是這里我把它忽略不計(jì),破折號(hào)、英文雙引號(hào)等同樣忽略,需要的再做些簡單調(diào)整即可。return para.split("\n")檢驗(yàn)效果
處理數(shù)據(jù)時(shí),除了分句可能還要先清洗特殊的數(shù)據(jù)格式,如微博,HTML代碼,URL,Email等,所以我將一批常用的數(shù)據(jù)預(yù)處理和清洗操作都整合進(jìn)了我開發(fā)的HarvestText庫(https://github.com/blmoistawinde/HarvestText)中,簡化大家的數(shù)據(jù)分析流程,歡迎試用~
總結(jié)
以上是生活随笔為你收集整理的用python进行精细中文分句(基于正则表达式)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tkmybatis 默认值 问题
- 下一篇: 过年不让放炮,我用Python实现了10