["all", "the", "above"] 以下函数似乎有效: re.split('\W+-6ren">
gpt4 book ai didi

python - 正则表达式从列表中删除非 A-Z a-z 的单词(异常(exception))

转载 作者:行者123 更新时间:2023-12-01 04:18:38 26 4
gpt4 key购买 nike

我想从字符串中删除非字母字符并将每个单词转换为列表组件,以便:

"All, the above." -> ["all", "the", "above"]

以下函数似乎有效:

re.split('\W+', str)

但它没有考虑极端情况。

例如:

"The U.S. is where it's nice." -> ["the", "U", "S", "is", "where", "it", "s", "nice"]

我希望删除句点,但不要删除撇号或“U.S.”中的句点

我的想法是创建一个正则表达式,其中空格被分解,但然后删除额外的标点符号:

"I, live at home." -> ["I", "live", "at", "home"] (comma and period removed)
"I J.C. live at home." -> ["I", "J.C.", "live", "at", "home"] (acronym periods not removed but end of sentence period removed)

对于这样的句子,我想做的事情变得足够困难:

"The flying saucer (which was green)." -> ["...", "green"] (ignore ").") 
"I J.C., live at home." -> ["I", "J.C.", "..."] (ignore punctuation)

特殊情况(从原始文本文件中检索字符串):

"I love you.<br /> Come home soon!" -> ["..."] (ignore breakpoint and punctuation) 

我对 python 比较陌生,创建正则表达式让我感到困惑,所以任何关于如何以这种方式解析字符串的帮助都会非常有帮助!如果这里有第 22 条军规,并且并非所有我想要完成的事情都是可能的,请告诉我。

最佳答案

虽然我知道您具体询问的是正则表达式,但解决您的整体问题的另一个解决方案是使用库来实现此明确目的。例如nltk 。它应该帮助您以合理的方式拆分字符串(将正确的标点符号解析为列表中的单独项目),然后您可以从那里过滤掉它们。

你是对的,极端情况的数量之所以巨大,正是因为人类语言不精确和模糊。使用已经考虑了这些边缘情况的库应该可以帮您省去很多麻烦。

关于在 nltk 中处理原始文本的有用入门书是 here 。对于您的用例来说,最有用的函数似乎是 nltk.word_tokenize,它传回单词和标点符号分隔的字符串列表。

关于python - 正则表达式从列表中删除非 A-Z a-z 的单词(异常(exception)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34006169/

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