Python中的文本清理

大家好,亲爱的Python爱好者们。

这篇文章是关于非常简单的文本清理。这里没有花哨或复杂的内容。
这可能不完全是一个实用的脚本,但它将帮助你理解一些东西是如何工作的,比如如何访问文件和将文本分解为单词。

在这篇文章中,我将讨论如何清理符号并将每个单词保留在单独的行中。

例如,我们有这个文本文件,想要去掉符号

!@#<h2>**The Qu!ck Br0wn F0x Jumps Over The L@zy D0g.**</h2>
 (Did you see that?) Th!s is a sample $tring with **m!xed** cAsE, num3r@ls (like 123), 

让我们来理清逻辑,分解问题,然后一步一步地进行。

1.首先,我们需要一个空列表来添加清理后的单词。

2.然后我们需要访问文本文件,这意味着打开文件。

3.Python 是逐行读取文件的,而不是逐字读取。因此,我们首先需要遍历每一行,然后遍历每一个单词,最后遍历每一个字符。
(行 → 单词 → 字符)

4.所以当我们遍历每一个字符时,我们需要检查它是否是符号。
如果是,那么它应该被去掉;如果不是,那么我们就保留它。

 

现在让我们通过代码片段一步一步地实现这个逻辑:

1.让我们先创建一个空列表:

words = []

我们还需要创建一个我们识别出的不希望出现在文本中的字符列表。


symbols = ['!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~']

2.现在是访问和打开文件的时候

with open("text.txt") as file:

 

3.在第3步中,我们讨论了Python如何逐行读取文件。

因此,为了实现这一点并遍历每个字符,我们需要使用嵌套循环

遍历行:

with open("text.txt") as file:
     for line in file:

遍历每行的单词:
这一部分有点棘手,因为我们不能仅仅说:

for word in line:

 

这里介绍一下 split() 方法的用法:
split() 的功能:

它将一个字符串分割成一个较小字符串的列表。

with open("text.txt") as file:
    for line in file:
        for word in line.split():
让我来解释一下这一部分:for line in file 将获取每一行。
for word in line 将从这一行中获取每一个单词。
假设这是我们的文本:"Hello, World!"for word in line 的作用是获取每一个单词,而不是一个完整的单词。所以基本上它不会打印出 “hello”,而是打印出如下内容:

H
e
l
l
o

我们不希望这样。这就是为什么我们需要 split() 方法来告诉 Python:“好的,从字符串中切割出整个单词,然后继续下一个单词,而不是逐个字符打印出来,然后再继续下一个单词。”

以下是一个示例:

text = "Hello, World!"
for word in text:
    print(word)

vs

text = "你好,世界!"
for word in text.split():
    print(word)

第一个输出将是:

H
e
l
l
o

第二个将打印出:

Hello,
World!

现在我们已经将每个单词作为整体,那么我们可以进入下一部分,检查每个单词中的符号。

但在我们像这样遍历每个字符之前:

for char in word:

我们需要在这个 for loop 外部创建一个空字符串,以便每当一个字符不是符号时,它就会被存储到那个变量中。
我们称之为 cleaned_word

cleaned_word = ""

以下是您提供的英文技术文章内容的中文翻译:

with open("text.txt") as file:
    for line in file:
        for word in line.split():
            cleaned_word = ""

请注意,代码部分保持不变,翻译主要集中在代码的上下文中。

现在我们可以遍历每个字符,检查是否有符号:

            cleaned_word = ""
            for char in word:
                if char not in symbols:
                    cleaned_word += char

现在我们要做的就是获取 cleaned_word 并将其添加到 words 列表中:

            final_word = cleaned_word.lower()
            words.append(final_word)

现在让我们将整个代码块放在一起:


with open("text.txt") as file:
    for line in file:
        for word in line.split():
            cleaned_word = ""
            for char in word:
                if char not in symbols:
                    cleaned_word += char
            final_word = cleaned_word.lower()

words.append(final_word)

最后一步是从 words 列表中获取每个 word

for word in words:
    print(word)

您还可以过滤清理后的单词,仅打印出长度大于5个字符的单词:

            final_word = cleaned_word.lower()
            if len(final_word) > 5:
                words.append(final_word)
with open("text.txt") as file:
    for line in file:
        for word in line.split():
            cleaned_word = ""

for char in word:
                if char not in symbols:
                    cleaned_word += char
            final_word = cleaned_word.lower()
            if len(final_word) > 5:
                words.append(final_word)

for word in words:
    print(word)

下次见

更多