Python 从TXT文件中删除标点符号和大小写

Python 从TXT文件中删除标点符号和大小写,python,Python,我在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:

我在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文件,将其拆分为单词,然后删除标点符号并将其全部转换为小写。应该不难吧?它返回时标点符号和大写字母保持不变。没有错误消息,它似乎忽略了部分代码


任何帮助都将不胜感激

我假设您导入了
字符串
模块。更换线路

if token in string.punctuation:         
     tokens.remove(token)
     token=tokens.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']

我假设您导入了
字符串
模块。更换线路

if token in string.punctuation:         
     tokens.remove(token)
     token=tokens.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()
无法拆分标点符号

其次,如果您将
用于令牌中的令牌
令牌
实际上是
令牌
中元素的副本,因此对
令牌
的更改不会更改
令牌

试试这个:

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时列表中的元素。你可以参考和。对于正则表达式部分,您可以查看代码中的几个问题:

首先,
split()
无法拆分标点符号

其次,如果您将
用于令牌中的令牌
令牌
实际上是
令牌
中元素的副本,因此对
令牌
的更改不会更改
令牌

试试这个:

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时列表中的元素。你可以参考和。对于regex部分,您可以查看

是否希望它更改原始文件?因为您没有在任何地方写入更改…不,我打算对程序中的字符串进行更多操作。您是否希望它更改原始文件?因为您没有在任何地方写入更改…不,我打算在程序中对字符串执行更多操作。我得到以下错误:AttributeError:“list”对象在哪个代码段中没有属性“translate”?我在第二节中确实犯了一个错误。我将
字符串大写,但我已经解决了这个问题,您的错误听起来与此无关。是的,
translate
是字符串方法,而不是列表方法。但在我的示例中它是在字符串上调用的。我的代码现在是:“code”def analyzer():inputfile=raw_input(“哪个文件?”))review=open(inputfile,'r')review=review.read()tokens=review.split()tokens=[tokens.translate(None,string.标点符号)。lower()表示令牌中的令牌]“code”,我得到的错误是:Traceback(最后一次调用):analyzer()文件“C:\Users\gebruiker\Desktop\t2.py”第55行,analyzer tokens=[tokens.translate(无,字符串.标点符号)。lower()表示令牌中的令牌]AttributeError:'list'对象没有属性'translate'我发布了您的代码的一个版本,其工作方式与您预期的一样。我收到以下错误:AttributeError:'list'对象没有属性'translate'在哪个代码段中?我在第二个代码段中确实犯了一个错误。我将
字符串大写
,但我已经修复了该错误,并且您的错误听起来未恢复是的,
translate
是一个字符串方法,而不是列表方法。但在我的示例中,它是在字符串上调用的。我的代码现在是:'code'def analyzer():inputfile=raw\u input(“哪个文件?:”)review=open(inputfile,'r')review=review.read()tokens=review.split()tokens=[tokens.translate(None,string.标点符号)。lower()对于令牌中的令牌]“code”,我得到的错误是:回溯(最近一次调用):文件“C:\Users\gebruiker\Desktop\t2.py”,第55行,在analyzer()文件“C:\Users\gebruiker\Desktop\t2.py”,第12行,在analyzer令牌中=[tokens.translate(None,String.标点符号)。lower()表示令牌中的令牌]AttributeError:“list”对象没有属性“translate”我发布了你的代码的一个版本,它可以像你期望的那样工作。它工作得很好!非常感谢,但是你能准确地解释代码的作用吗?因为我真的不喜欢使用我不懂的代码。它工作得很好!非常感谢,但是你能准确地解释吗代码的作用是什么?因为我真的很讨厌使用我不懂的代码。