gpt4 book ai didi

python - 使用 python 正则表达式的词标记化

转载 作者:太空狗 更新时间:2023-10-29 17:15:05 24 4
gpt4 key购买 nike

我正在尝试将字符串拆分为 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']

附言对不起,我的描述不是很好。我不确定如何解释它,并且在谷歌上大多不成功。我希望这个例子能正确地说明它。

编辑:我想我需要更精确,所以也是,

  1. 如果这个词被连字符和大写,比如'UN-American',它会把它作为一个词,所以输出将是'UN-American'
  2. 如果连字符的任一侧或两侧都有空格,如“THIS- is”或“This - is”,则应忽略连字符并生成 ["THIS", "is"] 和 ["This", "is"]分别,
  3. 同样对于撇号,如果它位于像“What'sItCalled”这样的单词的中间,它应该产生 ["What's","It", "Called"]

最佳答案

我建议如下:

re.findall("[A-Z]{2,}(?![a-z])|[A-Z][a-z]+(?=[A-Z])|[\'\w\-]+",s)

对于您的示例,这会产生:

["Jeff's", 'dog', 'is', 'un-American', 'Some', 'Times', 'BUT', 'NOT', 'Always']

说明:RegExp 由 3 个备选方案组成:

  1. [A-Z]{2,}(?![a-z]) 匹配所有字母大写的单词
  2. [A-Z][a-z]+(?=[A-Z]) 匹配首字母大写的单词。前瞻 (?=[A-Z]) 在下一个大写字母之前停止匹配
  3. [\'\w\-]+ 匹配所有其余的,即可能包含 '- 的单词。

关于python - 使用 python 正则表达式的词标记化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6202549/

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