【问题标题】:Python remove words containing "unusal" chracters [duplicate]Python删除包含“不寻常”字符的单词[重复]
【发布时间】:2021-03-14 09:42:18
【问题描述】:

我有一个单词数组,并且我想删除所有包含任何不寻常字符的单词,例如变音符号、重音符号等。(我知道有一些方法可以将它们标准化为常规字符,但我特别想删除他们)。

到目前为止,我的想法是创建一个可接受的字符数组(字母 az),因为这比创建一个考虑所有可能的字母和重音组合的黑名单更容易,然后通过我的单词数组检查单词是否有接受字符以外的任何字符。

我发现this 的文章描述了相反的情况,删除了所有确实包含特定字符的单词:

filtered_tokens = [w for w in tokens if all(ch not in w for ch in accepted_characters)]

不幸的是,一个简单的否定并不能解决我的问题。

我对建议和新方法持开放态度,但理想情况下,除了 nltk 之外,我希望它能够在没有其他包的情况下工作,我用它来从文本中提取我的单词。

【问题讨论】:

  • 欢迎来到 Stack Overflow。我建议您考虑this threadthis onealso this one
  • @Vlad str.strip 仅删除字符串左侧或右侧的字符,直到无法再删除为止。 "Hüllo" 在你的情况下会失败。
  • 这个问题看起来已经在这里提出并解决了https://stackoverflow.com/a/196392/2681662
  • 删除“不寻常”的东西几乎总是对“我不知道我在看什么。我希望它会消失”这个问题的错误答案。

标签: python string nlp nltk


【解决方案1】:

因此,您有一个单词列表,并且您想从该列表中删除整个单词。如果某个单词的任何字符不在“好”字符列表中,则从单词列表中删除该单词。

from string import ascii_lowercase

alphabet = frozenset(ascii_lowercase)

words = ["hüllo", "World", "youshouldseethis", "thisyoushouldn't"]


def is_valid_word(word):
    return all(char in alphabet for char in word)

filtered_words = list(filter(is_valid_word, words))
print(filtered_words)

输出:

['youshouldseethis']
>>> 

请注意,单词"World" 也不会出现在filtered_words 列表中,因为它包含一个大写字母。就我而言,我已将有效字符列表定义为仅小写字母 (a-z)。

确切地说,我们不会从任何集合中删除单词。相反,我们只是创建一个新列表,并且只保留那些我们认为有效的单词。 is_valid_word 是一个充当谓词的函数 - 如果当前单词中的所有字符都有效,则返回 True,否则返回 False

【讨论】:

    猜你喜欢
    • 2022-11-07
    • 2017-04-28
    • 1970-01-01
    • 2016-03-01
    • 2013-08-11
    • 1970-01-01
    • 2014-05-20
    • 2013-01-27
    • 2014-09-29
    相关资源
    最近更新 更多