最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)對中文文本分段分句

 更新時間:2023年03月15日 08:21:41   作者:虛壞叔叔  
這篇文章主要為大家詳細(xì)介紹了如何利用Python實現(xiàn)對中文文本分段分句,大致來說主要是以中文的句號、感嘆、問號等符號進(jìn)行分句,感興趣的可以了解一下

一、問題

實現(xiàn)對文本的分句,大致來說主要是以中文的句號、感嘆、問號等符號進(jìn)行分句。難點在于直接分句可能會造成人物說話的語句也被分開!

二、步驟

分段

首先讀取文本,文本讀取后整體是一個字符串,每一個段之間是空白,所以分段之間按照空白分開來即可,最后存入一個paragraph_list,注意該list的下標(biāo)就是段落的順序號!其他的這里就不再多贅述?。梢圆榭醋詈蟮恼w代碼)

分句

首先拿到上面分好的paragraph_list,循環(huán)拿到每一段,然后對每一段直接按照分句規(guī)則(正則表達(dá)式)進(jìn)行分句,參考該文章

import re

def cut_sent(para):
    para = re.sub('([。???\?])([^”'])', r"\1\n\2", para)
    para = re.sub('(\.{6})([^”'])', r"\1\n\2", para)
    para = re.sub('(\…{2})([^”'])', r"\1\n\2", para)
    para = re.sub('([。???\?][”'])([^,。???\?])', r'\1\n\2', para)
    para = para.rstrip()
    return para.split("\n")

# 這一段文字分句后應(yīng)該有的結(jié)果
s = '今天天氣好??!' \
    '溫度高嗎?你好,很高興遇見你,真不錯。' \
    '小明遇見小紅說:"你的衣服這好看!"' \
    '小紅說:"什么?衣服真好看?真的嗎?"' \
    '小明回答到:"嗯,真的!我也想買。"'

for i in cut_sent(s):
    print(i)
    
#結(jié)果將人物語句也分開
"""
今天天氣好?。?
溫度高嗎?
你好,很高興遇見你,真不錯。
小明遇見小紅說:"你的衣服這好看!
"小紅說:"什么?
衣服真好看?
真的嗎?
"小明回答到:"嗯,真的!
我也想買。
"
"""

連接

這里解決辦法就是循環(huán)每一句,識別:"和"

  • 兩個符號均有,則該句直接就是一整句,直接就加入
  • 兩個符號都沒有,則該句直接就是一整句,直接就加入
  • 如果只有前面符號而無后面符號,則記錄有前面符號那一句,依次往下拼接,直到遇到字符最后有“,將上面拼接好的語句作為一整句放入
def connect(paragraph):
    sentence_before = []
    sentence_after = []
    for each_para in paragraph:
        sentence_before.append(cut(each_para))
    # 核心代碼!(將被錯分的語句進(jìn)行連接)
    for each in sentence_before:
        list = []
        sentence = ""
        FLAG = True # 非常關(guān)鍵!判斷有':“'的符號后面的語句是否繼續(xù)拼接
        for i in each:
            if i.find(':“') * i.find('”') >= 0 and FLAG:
                list.append(i + sentence)
            else:
                FLAG = False
                sentence = sentence + i
                if i.find('”') > 0:
                    list.append(sentence)
                    sentence = ""
                    FLAG = True
        sentence_after.append(list)
    return sentence_after

三、最后整體代碼

import re
import pandas as pd

# 將整篇文章進(jìn)行分段
def segments(url):
    raw = pd.read_csv(url,names=['txt'], sep='aaa', encoding="GBK" ,engine='python')

    def m_head(tem_str):
        return tem_str[:1]

    def m_mid(tmp_str):
        return tmp_str.find("回 ")
    raw['head'] = raw.txt.apply(m_head)
    raw['mid'] = raw.txt.apply(m_mid)
    raw['len'] = raw.txt.apply(len)
    chap_num = 0
    for i in range(len(raw)):
        if raw['head'][i] == "第" and raw['mid'][i] > 0 and raw['len'][i] < 30:
            chap_num += 1
        if chap_num >= 40 and raw['txt'][i] == "附錄一:成吉思汗家族":
            chap_num = 0
        raw.loc[i, 'chap'] = chap_num
    del raw['head']
    del raw['mid']
    del raw['len']
    tmp_chap = raw[raw['chap'] == 7].copy()
    tmp_chap.reset_index(drop=True, inplace=True)
    tmp_chap['paraidx'] = tmp_chap.index
    paragraph = tmp_chap['txt'].values.tolist()
    return paragraph

# 將每段進(jìn)行分句
def cut(para):
    # 相關(guān)規(guī)則
    pattern = ['([。!?\?])([^”'])','(\.{6})([^”'])','(\…{2})([^”'])','([。!?\?][”'])([^,。!?\?])']
    for i in pattern:
        para = re.sub(i, r"\1\n\2", para)
    para = para.rstrip()
    return para.split("\n")

# 將其中被錯分的語句進(jìn)行連接(主要是針對話語)
def connect(paragraph):
    sentence_before = []
    sentence_after = []
    for each_para in paragraph:
        sentence_before.append(cut(each_para))
    # 核心代碼!(將被錯分的語句進(jìn)行連接)
    for each in sentence_before:
        list = []
        sentence = ""
        FLAG = True # 非常關(guān)鍵!判斷有':“'的符號后面的語句是否繼續(xù)拼接
        for i in each:
            if i.find(':“') * i.find('”') >= 0 and FLAG:
                list.append(i + sentence)
            else:
                FLAG = False
                sentence = sentence + i
                if i.find('”') > 0:
                    list.append(sentence)
                    sentence = ""
                    FLAG = True
        sentence_after.append(list)
    return sentence_after

# 將最后的結(jié)果保存到DataFrame
def toDataFrame(list3):
    df = pd.DataFrame(columns=["content","paragraph","sentence"])
    for para_num,i in enumerate(list3):
       for sentence_num,j in enumerate(i):
            df_ = pd.DataFrame({"content": j, "paragraph": para_num,"sentence":sentence_num+1},index=[para_num])
            df = df.append(df_,ignore_index=True)
    for i in df['content'].values.tolist():
        print(i)

def main():
    # URL = "/Users/dengzhao/Downloads/金庸-射雕英雄傳txt精校版.txt"
    URL = input("請輸入文件地址:")
    para = segments(URL)
    result = connect(para)
    print(result)
    flag = input("以DataFrame形式輸出數(shù)據(jù)(Y,N):")
    if flag == 'Y':
        toDataFrame(result)
    elif flag == 'N':
        print("Thanks?。。。?)
    else:
        print("程序結(jié)束!請檢查的你的輸入!")

if __name__ == '__main__':
    main()

到此這篇關(guān)于Python實現(xiàn)對中文文本分段分句的文章就介紹到這了,更多相關(guān)Python中文文本分段分句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用python求解二次規(guī)劃的問題

    使用python求解二次規(guī)劃的問題

    今天小編就為大家分享一篇使用python求解二次規(guī)劃的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 一文解密Python函數(shù)的實現(xiàn)原理

    一文解密Python函數(shù)的實現(xiàn)原理

    函數(shù)是任何一門編程語言都具備的基本元素,它可以將多個要執(zhí)行的操作組合起來,一個函數(shù)代表了一系列的操作。那就來看看Python函數(shù)的實現(xiàn)原理吧
    2023-03-03
  • 解決Python安裝時報缺少DLL問題【兩種解決方法】

    解決Python安裝時報缺少DLL問題【兩種解決方法】

    這篇文章主要介紹了解決Python安裝時報缺少DLL問題,本文通過兩種方法給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-07-07
  • Python二元賦值實用技巧解析

    Python二元賦值實用技巧解析

    這篇文章主要介紹了Python二元賦值實用技巧解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Python+PyQt6編寫一個圖片播放器

    Python+PyQt6編寫一個圖片播放器

    這篇文章主要為大家詳細(xì)介紹了Python如何結(jié)合PyQt6編寫一個圖片播放器,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的小伙伴可以參考下
    2025-02-02
  • python3使用scrapy生成csv文件代碼示例

    python3使用scrapy生成csv文件代碼示例

    這篇文章主要介紹了python3使用scrapy生成csv文件代碼示例,具有一定借鑒價值,需要的朋友可以參考下
    2017-12-12
  • 基于python的Tkinter編寫登陸注冊界面

    基于python的Tkinter編寫登陸注冊界面

    這篇文章主要為大家詳細(xì)介紹了基于python的Tkinter編寫登陸注冊界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • python實現(xiàn)將一個數(shù)組逆序輸出的方法

    python實現(xiàn)將一個數(shù)組逆序輸出的方法

    今天小編就為大家分享一篇python實現(xiàn)將一個數(shù)組逆序輸出的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 示例詳解Python3 or Python2 兩者之間的差異

    示例詳解Python3 or Python2 兩者之間的差異

    這篇文章主要介紹了Python3 or Python2?示例詳解兩者之間的差異,在本文中給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-08-08
  • 常用python編程模板匯總

    常用python編程模板匯總

    這篇文章主要為大家詳細(xì)介紹了常用python編程模板,總結(jié)了Python編程常用模板,感興趣的朋友可以參考一下
    2016-02-02

最新評論

台山市| 竹北市| 齐河县| 鹤山市| 图们市| 萝北县| 贵溪市| 忻城县| 剑河县| 刚察县| 黄梅县| 镇康县| 云霄县| 四会市| 孝昌县| 万全县| 清河县| 昌黎县| 南阳市| 神木县| 连州市| 秦皇岛市| 营口市| 都安| 天门市| 文化| 合江县| 蛟河市| 吴堡县| 阿图什市| 黔江区| 阿城市| 迭部县| 房山区| 宁安市| 宝山区| 沅江市| 蓬莱市| 盐城市| 苏尼特左旗| 武平县|