[英]Removing Punctuation and Capitalization from TXT file
我在python中有一个小问题。 我有脚本:
import nltk
def analyzer():
inputfile=raw_input("Which file?: ")
review=open(inputfile,'r')
review=review.read()
tokens=review.split()
for token in tokens:
if token in string.punctuation:
tokens.remove(token)
token=tokens.lower()
应该导入一个txt文件,将其拆分为单词,然后删除标点符号并将其全部转换为小写。 不难,对吧? 它只返回标点符号和大写形式不变。 没有错误信息,似乎只是忽略了部分代码。
任何帮助将非常感激。
我假设您已导入string
模块。 更换线
if token in string.punctuation:
tokens.remove(token)
token=tokens.lower()
同
token = token.translate(None,string.punctuation).lower()
另外,字符串在python中是不可变的,因此分配给它们只是重新绑定名称而不会更改原始标记。 如果您想更改令牌,则可以执行以下操作
tokens = [token.translate(None,string.punctuation).lower() for token in tokens]
就个人而言,我会像这样清理整个事情:
def read_tokens(path):
import string
with open(path) as f:
tokens = f.read().split()
return [ token.translate(None, string.punctuation).lower() for token in tokens ]
read_tokens(raw_input("which file?"))
请注意,这只是对您最初意图的忠实翻译,这意味着'test.me'
”之类的“单词”将变成['testme']
而不是['test','me']
您的代码中存在几个问题:
首先, split()
无法拆分标点符号
其次,如果使用for token in tokens
, token
实际上是元素的副本tokens
等changement token
不会改变tokens
。
尝试这个:
import string
import re
def analyzer():
inputfile=raw_input("Which file?: ")
review=open(inputfile,'r')
review=review.read()
tokens=[e.lower() for e in map(string.strip, re.split("(\W+)", review)) if len(e) > 0 and not re.match("\W",e)]
print tokens
analyzer()
模式[FUNC(x) for x in LIST if COND]
给出由FUNC(x)构造的列表,其中x是COND为true时LIST中的元素。 您可以参考filter和map 。 对于正则表达式部分,您可以考虑重新
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.