最近遇到一些情况需要对文本进行预处理,目的是从文本中提取特征。文本内容是不同病人的脾脏B超体检结果。内容格式如下:

其中有一部分内容还含有数字,例如这样:

 df_with_num=df[df['0116'].str.contains(r"\d")]df_with_num.head()
Out[82]: vid  \
67   00514cc6a2c229618b763ad30bf3ce5b
353  0192c4d2609f04826421606571d59a64
519  0266554b4a165b54fefd1dd8dc90379d
594  02b18cbdbef9e70593370357b89cd14f
625  02dbf6bd8c66b433a4716cfdf34aa09d   0116
67                        脾脏形态正常,包膜光整,实质回声均匀,脾厚度约52mm。
353                      脾脏形态饱满,包膜光整,实质回声均匀,脾厚度约41mm 。
519  脾脏形态正常,包膜光整,实质回声均匀,脾门周围可见一类圆形低回声区,大小约17 mm× 13...
594         脾脏大小、形态正常,包膜光整,回声均匀。脾门区见大小13x11mm等回声,界清规则。
625                  脾脏厚度约45mm ,长径约129mm,包膜光整,实质回声尚均匀。  

在这种情况下想要提取特征,感觉有点不太容易,事实上我到现在也没提取出什么有用的东西,但是,我还是把我目前为止经历过一系列试错之后的总结写一下,等到有了进度再更新。

这是目前想到的步骤:

##1去除数值型数据:
##2tf-idf
##3查找top,总结pos词
##4去除pos句子
##5再次tf-idf,查看分析
##6总结neg的几种主要形式

##7提取特征

为什么要这这样呢?因为经过观察发现大部分数据都是描述正常情况的,只有少部分是描述体检结果异常的,而有具体数值的绝大多数都是体检异常的。事实上体检异常的种类也是可以列举的,如脾脏大小问题会直接描述脾脏厚度,宽度等,回声区问题会描述回声区大小等。所以就像将描述正常情况的全部删除,只保留描述异常情况的,又由于异常情况可以列举完,正常情况就是异常情况的反面。而正常情况由于是大多数,我希望利用分词后的tf-idf得到topK的高频词,然后利用词性等,将描述如“脾脏大小、形态正常,包膜光整,回声均匀。”的分句去除掉。之后再在源数据基础上去除掉这些之后,将数值部分提取出来作为数据(还需要周全考虑,因为数值部分有描述脾脏大小和回声大小的,主语不同),基于这个思想,就有了上面的步骤。

但是我如果直接对数据使用jieba进行分词,会得到一大堆的数字,再去做tf-idf效果更差,所以必须先将每行数据中的数字部分都全部去除掉,再进行分词,然后再进行处理。过程如下:

首先我需要将数据的全角全部转换成半角,这点是从这里抄来的:python中半角与全角互相转换

def strQ2B(ustring):#"""全角转半角"""rstring = ""for uchar in ustring:inside_code=ord(uchar)if inside_code == 12288:    #全角空格直接转换inside_code = 32elif (inside_code >= 65281 and inside_code <= 65374): #全角字符(除空格)根据关系转化inside_code -= 65248rstring += chr(inside_code)##注意这里要是前面加一个tab,就不会将if里的内容加进来了return rstring##注意这里要是前面加一个tab,就变成第一次就return了##对str字段进行全角半角的转换
df['0116']=df['0116'].map(strQ2B)
#len(df[df['0116'].str.contains(r'\d')])##查看一下目前含有数字的有多少行
#Out[67]: 716

关于tab的注释是我加上去的...当时只是无脑抄,后来才发现有很大问题。

我为什么要进行这一步呢,事实上文本中基本都是全角,在我经历过下面两轮操作之后我怀疑是全角半角的问题,可惜不是,而是㎝,特殊字符,这是单位字符而非半角,我当成了半角,也是够坑的,后来我在正则中加入了这个就解决了。

接下来是要删除掉含有数值的分句,也是经过一段时间的学习,我知道了应该用正则来做,可惜我的正则学的并不好,又是经过了n久的试错之后,终于总结出了这个文本中该如何匹配还有数值的部分。主要是利用re.sub()函数将匹配的数值分句替换为空串,具体代码如下:

import re
def resub(str):return re.sub(r"(,|,|。|,)*?([^(,|,)]*?)(\d|(|)|\(|\)|\*|x)+( )*(mm|MM|cm|CM|㎜|㎝)(,|,|。|,)*?",'',str)
df['0116']=df['0116'].map(resub)
len(df[df['0116'].str.contains(r'\d')])
Out[125]: 0

看到这个正则我就觉得不容易,这个B超数据录入的太随性了,有特殊字符,有*,x,mm,MM,㎜,简直心累。还有发现全角的(不需要转义,而半角的(就需要加\转义,还有*也是。

目前就做到了这里有时间再写。

文本处理(一)全角转半角及正则匹配相关推荐

  1. 【转】刨根究底字符编码之五——简体汉字编码方案(GB2312、GBK等)以及全角、半角、CJK

    一.概述 1. 英文字母再加一些其他标点字符之类的也不会超过256个,用一个字节来表示一个字符就足够了(2^8 = 256).但其他一些文字不止这么多字符,比如中文中的汉字就多达10多万个,一个字节只 ...

  2. 输入法中的全角和半角是什么,角又是什么

    角是日语的角,不是中文的角,这里的意思是四边形,日语叫四角形,也有道理,有四个角嘛. 全角就是这个四边形是完全的,也就是方的,中文的字正好是方的. 半角就不用多说了,就是半个四边形,普通的英文字母正好 ...

  3. 数字全角转半角VBA

    Sub 数字全角转半角() ' ' 全角转半角 Macro '   Dim qjsz, bjsz As String, i As Integer '定义qjsz(全角数字).bjsz(半角数字)为字符 ...

  4. 中英文标点符号在全角和半角之下的区分

    文章目录 中英文标点符号在全角和半角之下的区分 中英文标点符号在全角和半角之下的区分 中文符号在半角和全角下, 是没有区分的. 英文符号在半角和全角下是不同的. 通常写程序时使用半角+英文符号. 中文 ...

  5. java 替换全角为半角 半角转全角

    /*** 替换全角为半角** @param text 文本* @param notConvertSet 不替换的字符集合* @return 替换后的字符*/public static String t ...

  6. java 日文全角转半角_java中全角转换为半角的方法

    在获取文本的时候,经常遇到数据格式的问题,需要判断或转换. 本文旨在解决全角符号转换为半角符号的问题. 网上大体有两种方法:转换编码或者替换. 我使用的是转换编码,引用自:http://blog.cs ...

  7. python3环境下的全角与半角转换代码和测试

    全角和半角转换是文本预处理的常见工作之一,然而现在网上一搜python的相关代码,几乎都是python2版本的,因此根据人角和半角的转换规律,将其代码撰写如下: 1.全角与半角之间的转换规律 角字符u ...

  8. python实现全角和半角互相转换

    全角转半角 # encoding=utf-8 #! /usr/bin/pythonimport sys import reif len(sys.argv) != 3:print("\nERR ...

  9. 如何使用php将字符从全角转为半角

    为什么80%的码农都做不了架构师?>>>    市面上很多评论系统,但是因为某种原因公司没去使用,评论系统使用php开发.垃圾评论中各种符号,各种全角数字或者字符,为了便于过滤,这边 ...

最新文章

  1. MATLAB判断三角形成立的编程,Triangulation 划分三角形网络时用到的大量算法和测试例程 matlab 259万源代码下载- www.pudn.com...
  2. 学习笔记 九: DNS
  3. 缓存核心知识小抄,面试必备,赶紧收藏!
  4. 清理Oracle安装目录里的一些日志信息
  5. Java——this
  6. 现在java就业前景怎么样?现在入行晚了吗
  7. [hadoop] kettle spoon 基础使用 (txt 内容抽取到excel中)
  8. Binary XML file line #2: You must supply a layout_height attribute inflate
  9. Failed building wheel for scandir 解决方案
  10. 湖南省对口升学c语言试题,湖南省对口升学计算机专业综合试卷试题.doc
  11. python函数速查手册_Pandas常用函数速查手册中文版
  12. 数字藏品平台开发数字藏品系统开发技术架构分析
  13. 工程施工工地进度监控带天气经纬度相机(监理日志不再难写)
  14. H5和原生开发的区别
  15. 校招----小米一面面经
  16. python pyttsx3实现文字朗读
  17. Chat Bot(聊天机器人)自动化测试脚本来解决人工测试的问题
  18. Ubuntu16.04挂载exfat格式U盘
  19. 【A021】Axure制作气泡闪动图
  20. 老板让我做研发负责人,谈谈我的想法和认知

热门文章

  1. 命题作文 在一棵IPv4地址树中彻底理解IP路由表的各种查找过程
  2. Qt项目实战3:二维码生成器
  3. 【操作系统/计组】页面大小 与 页表项 ( 二级页表 、多级页表 )
  4. xampp默认mysql密码设置,修改mysql的默认空密码
  5. 转载:旅行自行车选购技巧
  6. adb简介及常用命令
  7. bugku - 秋名山车神
  8. 幕布,为知笔记和Effie哪个更适合采编呢?
  9. python中quit函数用法_关于 Python 中的退出命令:sys.exit(n), os._exit(n), quit(), exit()...
  10. asp.net response.write输出html,ASP.NET 动态输出Javascript 文本格式换行问题 [ASP.NET | C# | Response]...