Python 文本处理介绍

文本处理,在Python中有很多方法,最常见的有正则表达式,标准库的字符串处理方法。当然除了常用的方法外,还可以使用NLTK自然语言工具包处理字符串、使用机器学习机器技术等。

下面我们先用正则表达式处理字符串。

一、删除字符串中的数字

import re

str1 = 'string with456, some111 hello 888 numbers'
txt = re.sub('[0-9]+', '', str1)
print(txt)

# 打印txt的输出结果:
# string with, some hellonumbers

二、使用多个分隔符(数字、逗号、空格、加号、冒号)进行分隔

import re

str1 = 'string with456, some111:hello 888 num+bers'
txt = re.split('[0-9,:+\s]+',str1)
print(txt)

# 打印txt的输出结果:
# ['string', 'with', 'some', 'hello', 'num', 'bers']

三、找到所有的数字

import re

str1 = 'string with456, some111:hello 888 num+bers'
txt = re.findall('[0-9]+', str1)
print(txt)

# 打印txt的输出结果:
# ['456', '111', '888']

四、找出两个相关的单词,它们之间最多有20个字符

import re

testy = 'The quick brown fox jumps over the lazy dog'
m = re.search(r"(quick|slow).{1,20}(fox|camel)", testy)
if m:
print 'Matched',m.groups()
print 'Starting at', m.start()
print 'Ending at', m.end()

五、使用NLTK自然语言处理字符

上面所有处理字符串的方法,都是用正则表达式处理。现在使用NLTK自然语言来处理。

NLTK是一个包含许多自然语言处理模块的Python包。

一个有用的文本预处理包是stopwords,它可以帮助从文本中删除许多stopwords (I, You, have,…)。

首先需要安装nltk,之后再下载nltk的数据包(stopwords):

import nltk
import ssl

try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    pass
else:
    ssl._create_default_https_context = _create_unverified_https_context

nltk.download('stopwords')

现在再来处理字符串:

from nltk.corpus import stopwords

all_stop_words = stopwords.words('english')
inputmessage = "I have to see see the code today"
outmessage = [word for word in inputmessage.split() if word.lower() not in all_stop_words]
print(outmessage)

# ['see', 'see', 'code', 'today']

这不是NLTK的全部,只是一个简单的实例。更多关于NLTK的内容,请查看官方网站。

六、使用Scikit-learn机器学习技术处理字符串

scikit-learn是一个非常流行的机器学习软件包。该模型可用于建立多种监督和非监督学习模型。

一个有用的文本预处理包是sklearn.feature_extraction.text。我们可以使用它从文档中提取和计数单词,构建词汇表等等

from sklearn.feature_extraction.text import CountVectorizer

data = ['hello world',
        'have a good day',
        'hello all',
        'how are you',
        'hello and have a nice day'
        ]

trans = CountVectorizer().fit(data)
print(trans.vocabulary_)

tr=trans.transform(data)
print (tr)

# {'hello': 6, 'world': 9, 'have': 5, 'good': 4, 'day': 3, 'all': 0, 'how': 7, 'are': 2,'you': 10, 'and': 1, #'nice': 8}
#   (0, 6)    1
#   (0, 9)    1
#   (1, 3)    1
#   (1, 4)    1
#   (1, 5)    1
#   (2, 0)    1
#   (2, 6)    1
#   (3, 2)    1
#   (3, 7)    1
#   (3, 10)    1
#   (4, 1)    1
#   (4, 3)    1
#   (4, 5)    1
#   (4, 6)    1
#   (4, 8)    1

从结果中我们可以看到,在列表的第一个元素中有单词6、9并且数量都是一个,在列表第二个元素中有单词3、4、5并且数量都是一个等等。

如果你觉得内容还不错,分享给更多朋友,一起提升编程技能。

原文发布于微信公众号 - TalkPython(TalkPython)

原文发表时间:2019-03-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券