文本处理,在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是一个包含许多自然语言处理模块的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是一个非常流行的机器学习软件包。该模型可用于建立多种监督和非监督学习模型。
一个有用的文本预处理包是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并且数量都是一个等等。
如果你觉得内容还不错,分享给更多朋友,一起提升编程技能。