gpt4 book ai didi

python - 如何在 Python 中遍历字符串的句子?

转载 作者:太空狗 更新时间:2023-10-29 22:11:43 25 4
gpt4 key购买 nike

假设我有一个字符串text = "A compiler translates code from a source language"。我想做两件事:

  1. 我需要使用 NLTK 库遍历每个单词和词干。词干提取函数是 PorterStemmer().stem_word(word)。我们必须传递参数“word”。我怎样才能提取每个单词并取回提取的句子?

  2. 我需要从 text 字符串中删除某些停用词。包含停用词的列表存储在文本文件中(空格分隔)

    stopwordsfile = open('c:/stopwordlist.txt','r+')
    stopwordslist=stopwordsfile.read()

    如何从 text 中删除那些停用词并获得干净的新字符串?

最佳答案

我将此作为评论发布,但我想我不妨将其充实成一个完整的答案并附上一些解释:

您想使用 str.split()将字符串拆分为单词,然后对每个单词进行词干处理:

for word in text.split(" "):
PorterStemmer().stem_word(word)

当您想要将所有词干组成的字符串组合在一起时,将这些词干重新连接在一起是微不足道的。为了轻松高效地做到这一点,我们使用 str.join()和一个 generator expression :

" ".join(PorterStemmer().stem_word(word) for word in text.split(" "))

编辑:

对于你的其他问题:

with open("/path/to/file.txt") as f:
words = set(f)

这里我们使用 the with statement 打开文件(这是打开文件的最佳方式,因为它处理正确地关闭它们,即使在异常情况下,并且更具可读性)并将内容读入一个集合。我们使用集合是因为​​我们不关心单词的顺序或重复项,以后会更有效率。我假设每行一个单词 - 如果不是这种情况,并且它们是逗号分隔的,或者是空格分隔的,那么使用 str.split() 就像我们之前所做的那样(使用适当的参数)可能是一个好计划。

stems = (PorterStemmer().stem_word(word) for word in text.split(" "))
" ".join(stem for stem in stems if stem not in words)

这里我们使用生成器表达式的 if 子句来忽略我们从文件加载的单词集中的单词。集合的成员检查是 O(1),所以这应该是相对有效的。

编辑 2:

要在单词被词干之前删除它们,甚至更简单:

" ".join(PorterStemmer().stem_word(word) for word in text.split(" ") if word not in words)

删除给定的词很简单:

filtered_words = [word for word in unfiltered_words if not in set_of_words_to_filter]

关于python - 如何在 Python 中遍历字符串的句子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10505741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com