第6章 实战之聊天语料处理

代码学习:

extract_conv.py文件:

函数1: 

def make_split(line):
    if re.match(r'.*([,…?!\.,!?])$', ''.join(line)):
        return []
    return [', ']

首先,定义函数 make_split():其主要实现功能是匹配开头为.*([,…?!\.,!?])$的字符串,若有这些字符串,将其用空格 表示。用空格 代替来连接line中的字符串。

re.match(r‘ ’)中,r的含义是精确匹配,防止转义(eg:\t表示空格,等)。

#注:.join()函数:

str = "-"
seq = ("a", "b", "c") # 字符串序列
print(str.join( seq )) #输出 a-b-c

. 匹配除换行符以外的任意字符

\w 匹配字母或数字或下划线或汉字 等价于 '[^A-Za-z0-9_]'。

\s 匹配任意的空白符

\d 匹配数字

\b 匹配单词的开始或结束

^ 匹配字符串的开始

$ 匹配字符串的结束

\w能不能匹配汉字要视你的操作系统和你的应用环境而定

元字符(*),匹配0个或多个

元字符(?),匹配一个或者0个

元字符(+), 匹配一个或者多个

元字符(|), 表示"或",如A|B,其中A,B为正则表达式,表示匹配A或者B

元字符({})

正则表达式相关学习链接可看:正则表达式特殊符号及用法

                                                  正则表达式详解

eg:input:你好?我是韩梅梅...

     output:你好我是韩梅梅

—————————————————————————华丽分割线——————————————————————————

函数2:

def good_line(line):
    if len(re.findall(r'[a-zA-Z0-9]', ''.join(line)))>2:
        return False
    return True

在输入中找到是否含有a-z、A-Z或0-9这样的大小写英文字母和0-9数字。长度大于两个字符则返回Flase,否则返回True。

eg:

import re


def good_line(line):
    if len(re.findall(r'[a-zA-Z0-9]', ''.join(line)))>2:
        return False
    return True


#line = "今天天气不错,出去打球吗?一起来吧."
line = "今天天气不99错,出5去打球吗?一起3来吧."

new_line = good_line(line)
print(new_line)
print(len(re.findall(r'[a-zA-Z0-9]', ''.join(line))))

#输出:False
       4

—————————————————————————华丽分割线——————————————————————————

函数3:

def regular(sen):
    sen = re.sub(r'\.{3,100}', '…', sen) #将输入中重复三次以上的.转换为…。注转义符\:因为.表示匹配除了换行符外的任何字符,加上\之后仅仅表示 .这个具体符号
    sen = re.sub(r'…{2,100}', '…', sen) #将输入中重复两次次以上的…转换为…
    sen = re.sub(r'[,]{1,100}', ',', sen) #将输入中重复一次以上的"英文,"转换为“汉语的,”
    sen = re.sub(r'[\.]{1,100}', '。', sen) #将输入中出现一次以上的.转换成。,个人理解如果.重复三次以上,则与sen = re.sub(r'\.{3,100}', '…', sen)同义,否则出现一次或两次转换成。
    sen = re.sub(r'[\?]{1,100}', '?', sen) #将输入中出现一次以上的"英文?"转换成“中文?”个人理解/没有意义,因为?不需要转移,/没有意义。
    sen = re.sub(r'[!]{1,100}', '!', sen) #将输入中出现一次以上的"英文!"转换成“中文!”

    return sen

eg:

import re


def regular(sen):
    sen = re.sub(r'\.{3,100}', '…', sen) #将输入中重复三次以上的.转换为…。注转义符\:因为.表示匹配除了换行符外的任何字符,加上\之后仅仅表示 .这个具体符号
    sen = re.sub(r'…{2,100}', '…', sen) #将输入中重复两次次以上的…转换为…
    sen = re.sub(r'[,]{1,100}', ',', sen) #将输入中重复一次以上的"英文,"转换为“汉语的,”
    sen = re.sub(r'[\.]{1,100}', '。', sen) #将输入中出现一次以上的.转换成。,个人理解如果.重复三次以上,则与sen = re.sub(r'\.{3,100}', '…', sen)同义,否则出现一次或两次转换成。\可删除因为在[]内,特殊符号无其特殊意义。详情见https://www.cnblogs.com/LoveFishC/p/4218366.html
    sen = re.sub(r'[\?]{1,100}', '?', sen) #将输入中出现一次以上的"英文?"转换成“中文?”个人理解/没有意义,因为?不需要转移,/没有意义。自己认为可删除,而且因为在[]内,特殊符号无其特殊意义。
    sen = re.sub(r'[!]{1,100}', '!', sen) #将输入中出现一次以上的"英文!"转换成“中文!”

    return sen


#line = "今天天气不错,出去打球吗?一起来吧."
line = "今天天气不错.出去打球吗?一起来吧..."

new_line = regular(line)
print(line)
print(new_line)

#输出:今天天气不错.出去打球吗?一起来吧...
      #今天天气不错。出去打球吗?一起来吧…

 

      #两句话的意义相同,因为在[]中,特殊符号失去其特有意义
      sen = re.sub(r'[.]{3,100}', '…', sen)
      sen = re.sub(r'\.{3,100}', '…', sen)

—————————————————————————华丽分割线——————————————————————————

以上句子的清洗过程就大体结束了。

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# 说明 该库是对目前市面上已有的开源中文聊天语料的搜集和系统化整理工作 该库搜集了包含 - chatterbot - 豆瓣多轮 - PTT八卦语料 - 青云语料 - 电视剧对白语料 - 贴吧论坛回帖语料 - 微博语料 - 小黄鸡语料 共8个公开闲聊常用语料和短信,白鹭时代问答等语料。 并对8个常见语料的数据进行了统一化规整和处理,达到直接可以粗略使用的目的。 **使用该项目,即可对所有的聊天语料进行一次性的处理和统一下载,不需要到处自己去搜集下载和分别处理各种不同的格式。* # 环境 python3 # 处理过程 将各个来源的语料按照其原格式进行提取,提取后进行繁体字转换,然后统一变成一轮一轮的对话。 # 使用方法 将解压后的raw_chat_corpus文件夹放到当前目录下 目录结构为 ``` raw_chat_corpus -- language -- process_pipelines -- raw_chat_corpus ---- chatterbot-1k ---- douban-multiturn-100w ---- .... -- main.py -- ... ``` 执行命令即可 ```bash python main.py ``` 或者 ```bash python3 main.py ``` # 生成结果 每个来源的语料分别生成一个独立的*.tsv文件,都放在新生成的clean_chat_corpus文件夹下。 生成结果格式为 tsv格式,每行是一个样本,先是query,再是answer ``` query \t answer ``` # 结果的使用 这个就根据每个人不同的情况自主使用即可 个人对于聊天机器人方向实践也不是很多,以下一篇之前写的知乎专栏供参考 **《从产品完整性的角度浅谈chatbot》** 文粗略讲解了如下一些方面,介绍了聊天机器人在实际产品化过程中可能遇到的问题和解决办法。 1. chatbot自身人格的设置 1. 产品上线需要考虑的敏感词处理 1. 文本检索模型的使用 1. 文本生成模型的使用 1. 回答打分机制 1. 万能回答的使用策略 1. 多媒体消息的处理 1. 产品模型部署的问题 # 版权说明 本项目为非商业项目,为纯搜集和汇总资料,如有侵权,请在issue下留言。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值