python处理文本的标点符号时,文本前半部分可以处理,后半部分没有效果,取后面的一句话单独处理,也是可以处理成功的

ewq21qwe 2017-03-10 08:07:41
用python处理文本的标点符号的时候,同一篇文档,前面的文本可以处理干净,后面的文本处理的根本不行。

源代码:


处理后的文本前半部分:


处理后的文本后半部分:


取后半部分的几句话单独处理,也是可以处理成功的:


求解答~

...全文
388 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sanGuo_uu 2017-03-13
  • 打赏
  • 举报
回复
引用 4 楼 ewq21qwe 的回复:
[quote=引用 1 楼 kevinelstri 的回复:] 文本中标点符号全部是中文的,而你正则表达式处理的是英文的,先将标点全部转化成英文的,再处理
但是为什么单独处理一句话的时候就可以把标点处理好呢?[/quote] 你看这个: ?? !! 这些符号都是分中文输入和英文输入的,你正则里面2个都要有吧。
ewq21qwe 2017-03-13
  • 打赏
  • 举报
回复
引用 1 楼 kevinelstri 的回复:
文本中标点符号全部是中文的,而你正则表达式处理的是英文的,先将标点全部转化成英文的,再处理
但是为什么单独处理一句话的时候就可以把标点处理好呢?
ewq21qwe 2017-03-13
  • 打赏
  • 举报
回复
引用 2 楼 u012536120 的回复:
看了半天,搞不懂你要处理成什么样子的。 把某些符号,字母去掉。然后换一下编码? 那你后半部分应该是什么样子的?
我是想把先文档中的标点符号去掉,然后分词。
ewq21qwe 2017-03-13
  • 打赏
  • 举报
回复
引用 7 楼 u012536120 的回复:
[quote=引用 6 楼 ewq21qwe 的回复:] 正则里面中英文的 问号 都有啊,我觉得问题不在于正则里面少了标点,而是编码问题,我将处理之后的文本保存在自动生成的一个文档里的时候,输出的文本会好一点,但是不明白为什么
你在第一个图片里没有替换数字,但是注释里写了替换数字。 你把整个代码(函数splitwords)贴出来,我试试。[/quote] 而且关键是 文本少的时候可以处理,文本一多就不可以了
ewq21qwe 2017-03-13
  • 打赏
  • 举报
回复
引用 7 楼 u012536120 的回复:
[quote=引用 6 楼 ewq21qwe 的回复:] 正则里面中英文的 问号 都有啊,我觉得问题不在于正则里面少了标点,而是编码问题,我将处理之后的文本保存在自动生成的一个文档里的时候,输出的文本会好一点,但是不明白为什么
你在第一个图片里没有替换数字,但是注释里写了替换数字。 你把整个代码(函数splitwords)贴出来,我试试。[/quote] 这就是整个代码,处理数字的时候 只要把line=re.sub("[a-zA-Z0-9]".decode('utf-8'), "".decode('utf-8'),line) 这里改了就可以啊。 #-*-encoding:utf-8-*- import jieba import re def splitwords(inpname,outname): fin=open(inpname,'r') fout=open(outname,'a') stopwords = {}.fromkeys([ line.rstrip() for line in open('stopwords.txt')]) for eachLine in fin: #删除空白符(包括'\n', '\r', '\t', ' ') line=eachLine.strip().decode('utf-8','ignore') #去掉数字和标点符号,英文字母,返回line line=re.sub("[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~:- :()“ ” ;《》【 】@#¥%……&*()]+".decode('gb2312'), "".decode('gb2312'),line) line=re.sub("\[|]".decode('utf-8'), "".decode('utf-8'),line) line=re.sub("[a-zA-Z0-9]".decode('utf-8'), "".decode('utf-8'),line) #英文 wordList=list(jieba.cut(line)) outStr='' for word in wordList: if word not in stopwords: outStr+=word outStr+=' ' fout.write(outStr.encode('utf-8','ignore')+'\n') fin.close() fout.close() splitwords('r1.txt','result1.txt')
sanGuo_uu 2017-03-13
  • 打赏
  • 举报
回复
引用 6 楼 ewq21qwe 的回复:
正则里面中英文的 问号 都有啊,我觉得问题不在于正则里面少了标点,而是编码问题,我将处理之后的文本保存在自动生成的一个文档里的时候,输出的文本会好一点,但是不明白为什么
你在第一个图片里没有替换数字,但是注释里写了替换数字。 你把整个代码(函数splitwords)贴出来,我试试。
ewq21qwe 2017-03-13
  • 打赏
  • 举报
回复
引用 5 楼 u012536120 的回复:
[quote=引用 4 楼 ewq21qwe 的回复:] [quote=引用 1 楼 kevinelstri 的回复:] 文本中标点符号全部是中文的,而你正则表达式处理的是英文的,先将标点全部转化成英文的,再处理
但是为什么单独处理一句话的时候就可以把标点处理好呢?[/quote] 你看这个: ?? !! 这些符号都是分中文输入和英文输入的,你正则里面2个都要有吧。[/quote] 正则里面中英文的 问号 都有啊,我觉得问题不在于正则里面少了标点,而是编码问题,我将处理之后的文本保存在自动生成的一个文档里的时候,输出的文本会好一点,但是不明白为什么
sanGuo_uu 2017-03-12
  • 打赏
  • 举报
回复
看了半天,搞不懂你要处理成什么样子的。 把某些符号,字母去掉。然后换一下编码? 那你后半部分应该是什么样子的?
  • 打赏
  • 举报
回复
文本中标点符号全部是中文的,而你正则表达式处理的是英文的,先将标点全部转化成英文的,再处理

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧