gpt4 book ai didi

python - NLTK 正则表达式分词器在正则表达式中不能很好地处理小数点

转载 作者:太空狗 更新时间:2023-10-30 02:31:46 28 4
gpt4 key购买 nike

我正在尝试编写一个文本规范化器,需要处理的基本情况之一是将类似 3.14 的内容转换为 three point one four三点十四.

我目前正在使用模式 \$?\d+(\.\d+)?%?nltk.regexp_tokenize,我认为它应该将数字处理为以及货币和百分比。然而,目前,像 $23.50 这样的东西被完美地处理了(它解析为 ['$23.50']),但是 3.14 被解析为 ['3', '14'] - 小数点被删除。

我已经尝试在我的正则表达式中添加一个单独的模式 \d+.\d+ ,但这没有帮助(我当前的模式不应该匹配吗?)

编辑 2:我刚刚还发现 % 部分似乎也没有正常工作 - 20% 仅返回 ['20']。我觉得我的正则表达式一定有问题,但我已经在 Pythex 中测试过它似乎没问题?

编辑:这是我的代码。

import nltk
import re

pattern = r'''(?x) # set flag to allow verbose regexps
([A-Z]\.)+ # abbreviations, e.g. U.S.A.
| \w+([-']\w+)* # words w/ optional internal hyphens/apostrophe
| \$?\d+(\.\d+)?%? # numbers, incl. currency and percentages
| [+/\-@&*] # special characters with meanings
'''
words = nltk.regexp_tokenize(line, pattern)
words = [string.lower(w) for w in words]
print words

这是我的一些测试字符串:

32188
2598473
26 letters from A to Z
3.14 is pi. <-- ['3', '14', 'is', 'pi']
My weight is about 68 kg, +/- 10 grams.
Good muffins cost $3.88 in New York <-- ['good', 'muffins', 'cost', '$3.88', 'in', 'new', 'york']

最佳答案

罪魁祸首是:

\w+([-']\w+)*

\w+ 将匹配数字,因为那里没有 .,它将只匹配 3.14 中的 3 .稍微移动选项,使 \$?\d+(\.\d+)?%? 位于上述正则表达式部分之前(以便首先尝试对数字格式进行匹配):

(?x)([A-Z]\.)+|\$?\d+(\.\d+)?%?|\w+([-']\w+)*|[+/\-@&*]

regex101 demo

或扩展形式:

pattern = r'''(?x)               # set flag to allow verbose regexps
([A-Z]\.)+ # abbreviations, e.g. U.S.A.
| \$?\d+(\.\d+)?%? # numbers, incl. currency and percentages
| \w+([-']\w+)* # words w/ optional internal hyphens/apostrophe
| [+/\-@&*] # special characters with meanings
'''

关于python - NLTK 正则表达式分词器在正则表达式中不能很好地处理小数点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22175923/

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