【发布时间】:2016-03-04 12:51:10
【问题描述】:
我想从字符串中删除非字母字符并将每个单词转换为列表组件,这样:
"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"]
我希望删除句点,但不删除撇号或“美国”中的句点
我的想法是创建一个正则表达式,其中空格被分解,然后删除额外的标点符号:
"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 个问题,并且并非我想要完成的所有事情都是可能的,请告诉我。
【问题讨论】:
-
The person lives in the U.S.怎么样。是否应该删除最后一个句号,因为它是句子的结尾?或者不是,因为它是首字母缩略词的一部分。 -
["The", "person", "lives", "in", "the", "U.S."] 就足够了。这是另一个极端案例!谢谢指出
-
这个级别的自然语言处理比正则表达式所能处理的要复杂得多。
-
输入总是一个句子还是你要抛出多个句子?
-
@Max 也许你应该使用你的包装器,然后使用正则表达式来帮助删除 after 你已经用你的包装器解析了它。