NLTK + 英文文本清洗_Aiclin的博客-程序员宅基地_英文文本清洗

技术标签: NLP  

下面展示了一种简易清洗英文文本的模板代码,可自定义修改或补充

import re
from nltk.corpus import stopwords
from nltk import word_tokenize,pos_tag
from nltk.stem import WordNetLemmatizer

def tokenize(sentence):
    '''
        去除多余空白、分词、词性标注
    '''
    sentence = re.sub(r'\s+', ' ', sentence)
    token_words = word_tokenize(sentence)
    token_words = pos_tag(token_words)   
    return token_words

wordnet_lematizer = WordNetLemmatizer()

def stem(token_words):
    '''
        词形归一化
    '''
    words_lematizer = []
    for word, tag in token_words:
        if tag.startswith('NN'):
            word_lematizer =  wordnet_lematizer.lemmatize(word, pos='n')  # n代表名词
        elif tag.startswith('VB'): 
            word_lematizer =  wordnet_lematizer.lemmatize(word, pos='v')   # v代表动词
        elif tag.startswith('JJ'): 
            word_lematizer =  wordnet_lematizer.lemmatize(word, pos='a')   # a代表形容词
        elif tag.startswith('R'): 
            word_lematizer =  wordnet_lematizer.lemmatize(word, pos='r')   # r代表代词
        else: 
            word_lematizer =  wordnet_lematizer.lemmatize(word)
        words_lematizer.append(word_lematizer)
    return words_lematizer

sr = stopwords.words('english')
def delete_stopwords(token_words):
    '''
        去停用词
    '''
    cleaned_words = [word for word in token_words if word not in sr]
    return cleaned_words

def is_number(s):
    '''
        判断字符串是否为数字
    '''
    try:
        float(s)
        return True
    except ValueError:
        pass
 
    try:
        import unicodedata
        unicodedata.numeric(s)
        return True
    except (TypeError, ValueError):
        pass
 
    return False

characters = [' ',',', '.','DBSCAN', ':', ';', '?', '(', ')', '[', ']', '&', '!', '*', '@', '#', '$', '%','-','...','^','{','}']
def delete_characters(token_words):
    '''
        去除特殊字符、数字
    '''
    words_list = [word for word in token_words if word not in characters and not is_number(word)]
    return words_list

def to_lower(token_words):
    '''
        统一为小写
    '''
    words_lists = [x.lower() for x in token_words]
    return words_lists

def pre_process(text):
    '''
        文本预处理
    '''
    token_words = tokenize(text)
    token_words = stem(token_words)
    token_words = delete_stopwords(token_words)
    token_words = delete_characters(token_words)
    token_words = to_lower(token_words)
    return token_words

if __name__ == '__main__':
    text = 'This is an example of English sentence which contains some other characters [email protected]#$%^&*()...'
    token_words = tokenize(text)
    token_words = stem(token_words)
    token_words = delete_stopwords(token_words)
    token_words = delete_characters(token_words)
    token_words = to_lower(token_words)
    print(token_words)
    

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/newCraftsman/article/details/105483094

智能推荐

VB编程:用Shell函数打开记事本-54_彭世瑜的博客-程序员宅基地_vb编程:用shell函数打开记事本

Private Declare Function GetSystemDirectory Lib "kernel32"Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSizeAs Long) As LongDim strtemp As String * 60Private Sub Co...

VMWare安装MAC OS X Snow Leopard 10.6安装经验_黑暗行动的博客-程序员宅基地

安装环境:Windows 7 Ultimate, 64-bit 6.1.7601, Service Pack 1VMware Workstation 10.0.1 build-1379776VMware Workstation 10.0(百度网盘下载:http://pan.baidu.com/s/1CI91k)破解机 百度网盘下载:http://pan.baidu.com/s/1jG2YSR0Ma

Docker image的工作原理_weixin_34067049的博客-程序员宅基地

为什么80%的码农都做不了架构师?>>> ...

新手小白,常会走进这6个误区,做自媒体建议避免_大 周 网 络的博客-程序员宅基地_那些新手很容易进入的误区

很多新手小白涌入自媒体这个行业,有不少人都是雄心壮志的来,垂头丧气的离开,是因为他们事先没做好全方位的了解,根本没有做互联网的思维就一头扎进来。现在是流量为王的时代(流量=钱),很多人开始选择坚持或者辞职后全职做自媒体创业,想在自媒体行业中闯出一片天地。在缺乏经验、零基础的情况下贸然进入,没有领路人,是要走很多弯路的。大周今天给大家分享几点我自己的经验总结,为了能让你更好的规避1、直接干有不少新手小白都会被割韭菜,他们听说自媒体可以快速赚钱,利用零碎的时间就可赚外快,也没有去自己调查、研究,就一头

关于python出现中文乱码的问题_树叶蓁蓁的博客-程序员宅基地

在unicode中,无论是半角的英文字母,还是全角的汉字,它们都是统一的”一个字符“!同时,也都是统一的”两个字节“,请注意”字符”和”字节”两个术语的不同,“字节”是一个8位的物理存贮单元,而“字符”则是一个文化相关的符号UTF-8就是每次8个位传输数据,而 UTF-16 就是每次16个位。UTF-8就是在互联网上使用最广的一种 unicode 的实现方式,这是为传输而设计的编码,并使编码无国...

python处理表格数据教程_利用Python处理Excel数据_weixin_39627052的博客-程序员宅基地

本文的数据源是朝阳医院2016的销售数据,课程是使用R语言来进行数据处理的,这里尝试采用Python来处理。要求的业务指标是:1)月均消费次数;2)月均消费金额;3)客单价;4)消费趋势这几个指标主要判断了用户端的消费趋势,为了给医院更多的指导,在此基础上进行了一定的扩展,个人增加了两个业务指标,也是为了多熟悉库的使用:5)列出各类药品售出数量的排名。这个指标可以指导医院多存储哪类药品,少存储哪类...

随便推点

从头开始搭建集群(二)_weixin_33696822的博客-程序员宅基地

从头开始搭建集群(二)检验集群的安装目录3.1. 检验Corosync的安装 .............................................................. 273.2. 检查Pacemaker的安装 .....................................................

php maxInstances,win2008服务器IIS+fastCGI完美设置教程_weixin_39942213的博客-程序员宅基地

帮用户配置服务器,装的WIN2008系统,在WIN2008的IIS7上用FASTCGI调使用PHP-CGI.EXE,默认只有4个进程,这样对于大流量的网站为说进程数不足带来的进程排队现象十分严重,处理方案如下32位系统 http://www.iis.net/Downloads/files/AdminPack/TP2/AdminPack_x86.msi64位系统 http://www.iis.net...

mybatis特殊字符处理_软件老王的博客-程序员宅基地_mybatis 冒号

1. 场景描述在web项目中经常会统计一些信息,会使用到大于小于等字符,但是在mybatis的mpper.xml中是不识别的。2. 解决方案2.1 使用处理标签使用<![CDATA[]]>处理标签,该标签是针对xml文件的,标签的作用就是把标签内容按文本处理。例如:大于:<![CDATA[ > ]]>大于等于:<![CDATA[ >= ]]&...

Android平台下渗透测试工具大集合_sos995的博客-程序员宅基地

[整理]Android平台下渗透测试工具大集合cs24 @工具 2012-08-15 共 29988 人围观,发现 11 个不明物体 收藏该文分享一个google的项目,各种Android下的渗透测试工具。Ad Network Detector (1.2): http://market.android.com/details?id=com.lookout.addet

ifcfg-eth0 配置 _qk_zhu的博客-程序员宅基地

<br />original link http://blog.csdn.net/pheror_abu/archive/2010/05/27/5628737.aspx<br /> <br />转自:http://hi.baidu.com/lei005/blog/item/92df5e8314544a9cf703a648.html<br />/etc/sysconfig/network 包括主机基本网络信息,用于系统启动<br />/etc/sysconfig/network-script/ 此目录下是系统启

int类型数据范围 - 学习_穿素白衫的中少年的博客-程序员宅基地_int类型判断数字区间

1.介绍 弄清楚这个事情,首先要知道,二进制与位的概念 二进制: 就是01010101...组成的一段数字,计算机内部[底层]使用的即二进制,包括储存和传输。 补充: 【计算机使用二进制和现代计算机系统的硬件实现有关。组成计算机系统的逻辑电路通常只有两个状态,即开关的接通与断开。】 二进制的发明者是 戈特弗里德·威廉·莱布尼茨【德国数理哲学大师...

推荐文章

热门文章

相关标签