【发布时间】:2011-09-06 08:23:28
【问题描述】:
我正在尝试将字符串拆分为 python 中的“标签”列表。拆分应处理诸如“HappyBirthday”之类的字符串并删除大部分标点符号,但保留连字符和撇号。我的出发点是:
tags = re.findall("([A-Z]{2,}(?=[A-Z]|$)|[A-Z][a-z]*)|\w+-\w+|[\w']+"
我想把这个样本数据:
Jeff's dog is un-American SomeTimes! BUT NOTAlways
进入:
['Jeff's', 'dog', 'is', 'un-American', 'Some', 'Times', 'BUT', 'NOT', 'Always']
附:很抱歉我的描述不是很好。我不知道如何解释它,并且在谷歌上大多不成功。我希望这个例子能正确地说明它。
编辑:我认为我需要更精确,所以,
- 如果单词是连字符和大写字母,例如“UN-American”,它会将其保留为一个单词,因此输出将是“UN-American”
- 如果连字符的一侧或两侧有空格,例如 la 'THIS-is' 或 'This - is',它应该忽略连字符并生成 ["THIS", "is"] 和 ["This", “是”] 分别是,
- 类似地,如果撇号位于“What'sItCalled”之类的单词中间,则应该产生 ["What's","It", "Called"]
【问题讨论】:
-
通常这被称为标记化或“单词标记化”,并且没有针对此问题的通用解决方案。我愿意接受不够完美的解决方案。
-
另一个问题是,将正则表达式用于单词标记化这样复杂的事情可能会产生一个相对神秘的解决方案。
-
奥术与否,我不在乎我是否得到它,如果它有效,我会很高兴。