我试图在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']
对不起,我的描述不太好。我不知道该如何解释,而且在google上几乎没有成功。我希望这个例子能恰当地说明这一点。
编辑:我想我需要更精确,所以
我建议如下:
这为您的示例提供了:
说明:RegExp由3个选项组成:
[A-Z]{2,}(?![a-z])
匹配所有大写字母的单词[A-Z][a-z]+(?=[A-Z])
匹配带有第一个capitel字母的单词。向前看(?=[A-Z])
在下一个大写字母之前停止匹配[\'\w\-]+
匹配所有其他单词,即可能包含'
和-
的单词。为了处理您编辑的案例,我将修改phynfo(+1)很好的答案
你必须清楚地为你想要的行为定义规则。标记化不是一个定义,您必须有类似于phynfo规则的东西。E、 例如,有一条规则是
'NOTAlways'
应该转到'NOT'
,和'Always'
,并且应该保留连字符。因此'UN-American'
被分裂,就像非美国人被分裂一样。可以尝试定义其他规则,但必须清楚当规则重叠时应用的规则。相关问题 更多 >
编程相关推荐