快速提问:在将其输入某些自然语言处理算法之前,我正在使用stringand去除所有标点符号和停用词的文本块作为数据预处理的一部分。nltk.stopwords我已经在几个原始文本块上分别测试了每个组件,因为我仍然习惯了这个过程,而且看起来还不错。 def text_process(text): """ Takes in string of text, and does following operations: 1. Removes punctuation. 2. Removes stopwords. 3. Returns a list of cleaned "tokenized" text. """ nopunc = [char for char in text.lower() if char not in string.punctuation] nopunc = ''.join(nopunc) return [word for word in nopunc.split() if word not in stopwords.words('english')]然而,当我将此函数应用于我的数据框的文本列时——它是来自一堆 Pitchfork 评论的文本——我可以看到标点符号实际上并没有被删除,尽管停用词被删除了。未处理: pitchfork['content'].head(5)0 “Trip-hop” eventually became a ’90s punchline,...1 Eight years, five albums, and two EPs in, the ...2 Minneapolis’ Uranium Club seem to revel in bei...3 Minneapolis’ Uranium Club seem to revel in bei...4 Kleenex began with a crash. It transpired one ...Name: content, dtype: object处理: pitchfork['content'].head(5).apply(text_process)0 [“triphop”, eventually, became, ’90s, punchlin...1 [eight, years, five, albums, two, eps, new, yo...2 [minneapolis’, uranium, club, seem, revel, agg...3 [minneapolis’, uranium, club, seem, revel, agg...4 [kleenex, began, crash, it, transpired, one, n...Name: content, dtype: object关于这里出了什么问题的任何想法?我查看了文档,但我还没有看到任何人以完全相同的方式解决这个问题,所以我很想了解如何解决这个问题。非常感谢!
1 回答

侃侃无极
TA贡献2051条经验 获得超10个赞
这里的问题是 utf-8 对左右引号(单引号和双引号)有不同的编码,而不仅仅是string.punctuation.
我会做类似的事情
punctuation = [ c for c in string.punctuation ] + [u'\u201c',u'\u201d',u'\u2018',u'\u2019']
nopunc = [ char for char in text.decode('utf-8').lower() if char not in punctuation ]
这会将非 ascii 引号的 utf-8 值添加到名为 的列表中punctuation,然后将文本解码为utf-8,并替换这些值。
注意:这是python2,如果您使用的是python3,则utf值的格式可能会略有不同
添加回答
举报
0/150
提交
取消