在Python中去除文本中的标点符号

12 浏览
0 Comments

在Python中去除文本中的标点符号

我正在尝试从一个文本文件中获取单词,并剥离掉所有的标点符号。我尝试了以下代码:

import re 
with open('hw.txt') as f:
    lines_after_254 = f.readlines()[254:]
    sent = [word for line in lines_after_254 for word in line.lower().split()]
    words = re.sub('[!#?,.:";]', '', sent)

我得到了以下错误:

return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or buffer

0
0 Comments

在Python中去除文本中的标点符号是一个常见的需求。标点符号可能会干扰文本的处理和分析,因此需要将其从文本中删除。下面是一个用于去除标点符号的函数remove_puncts()

import string
translator = str.maketrans('', '', string.punctuation)
def remove_puncts(input_string):
    return input_string.translate(translator)

使用示例:

input_string = """"YH&W^(*D)#IU*DEO)#brhtr<><}{|_}vrthyb,.,''fehsvhrr;[vrht":"]`~!@#$%svbrxs"""
remove_puncts(input_string)
'YHWDIUDEObrhtrvrthybfehsvhrrvrhtsvbrxs'

编辑:速度对比

事实证明,使用translator方法比使用正则表达式进行替换更快。

import re, string, time
pattern = '[!#?,.:";]'
def regex_sub(input_string):
    return re.sub(pattern, '', input_string)
translator = str.maketrans('', '', string.punctuation)
def string_translator(input_string):
    return input_string.translate(translator)
input_string = """cwsx#?;.frvcdr"""
string_translator(input_string)
regex_sub(input_string)
passes = 1000000
t1 = time()
for i in range(passes):
    a = string_translator(input_string)
t2 = time()
for i in range(passes):
    a = regex_sub(input_string)
t3 = time()
string_translator_time = t2 - t1
regex_sub_time = t3 - t2
print(string_translator_time) # 1.341651439666748
print(regex_sub_time) # 3.44773268699646

这段代码比较了使用translator方法和正则表达式进行替换的速度。通过对比发现,translator方法更快。

原因是translator方法使用str.maketrans()函数创建了一个字符映射表,然后使用translate()函数将输入字符串中的标点符号替换为空字符串。这种方法的优点是简单高效。

相比之下,使用正则表达式进行替换需要使用re.sub()函数,并提供一个匹配标点符号的模式。这种方法相对复杂,而且速度较慢。

因此,使用translator方法是去除文本中标点符号的更好选择。它能够更快速地完成任务,提高代码的执行效率。

0
0 Comments

在Python中,有时候我们需要从文本中去掉标点符号。然而,有一个问题出现了。原因是我们错误地将re.sub函数应用于了一个列表而不是一个字符串。

具体来说,我们想要使用re.sub函数将字符串中的标点符号替换成空字符,从而去掉它们。但是,我们错误地将这个函数应用于了一个列表。在代码中,我们使用了print语句打印出了结果,但是结果并不是我们期望的。

解决这个问题的方法是将re.sub函数应用于字符串而不是列表。我们需要使用列表推导式来遍历列表中的每个字符串,并将re.sub函数应用于每个字符串。这样,我们就可以正确地去掉标点符号。

下面是正确的代码:

print [re.sub(pattern, '', s) for s in sent]

希望这篇文章对你有帮助!

0
0 Comments

在Python中去除文本中的标点符号

在Python中,处理文本数据时,经常会遇到需要去除标点符号的情况。标点符号对于文本分析和处理来说通常是没有意义的,因此需要将其去除。

问题的出现原因:

在上述代码中,出现了一些问题。首先,代码将输入的字符串拆分为单个字符,而不是进行分词。其次,在拆分为字符后,才移除特殊字符。这样的处理方式不够高效和准确。

解决方法:

更好的方式是首先读取输入的字符串,然后移除其中的特殊字符,最后再进行分词。这样可以更好地处理文本数据。

代码示例:

import re
# 打开输入的文本文件并进行读取
string = open('hw.txt').read()
print string
# 从读取的字符串中移除特殊字符
no_specials_string = re.sub('[!#?,.:";]', '', string)
print no_specials_string
# 将文本进行分词,并将单词存储在一个列表中
words = no_specials_string.split()
print words

另外,如果想先分词,然后再移除特殊字符,可以使用以下代码:

import re
# 打开输入的文本文件并进行读取
string = open('hw.txt').read()
print string
# 将文本进行分词,并将单词存储在一个列表中
words = string.split()
print words
# 对列表中的每个单词移除特殊字符
new_words = [re.sub('[!#?,.:";]', '', word) for word in words]
print new_words

通过以上代码示例,可以很方便地实现在Python中去除文本中的标点符号的操作。这样的处理可以更好地准备文本数据,以便进行后续的分析和处理。

0