gpt4 book ai didi

python - scikit-learn:标记化时不要分隔带连字符的单词

转载 作者:太空狗 更新时间:2023-10-29 22:25:25 28 4
gpt4 key购买 nike

我正在使用 CountVectorizer 并且不想将带连字符的单词分成不同的标记。我已尝试将不同的 pregex 模式传递到 token_pattern 参数中,但未能获得所需的结果。

这是我尝试过的:

pattern = r''' (?x)         # set flag to allow verbose regexps 
([A-Z]\.)+ # abbreviations (e.g. U.S.A.)
| \w+(-\w+)* # words with optional internal hyphens
| \$?\d+(\.\d+)?%? # currency & percentages
| \.\.\. # ellipses '''

text = 'I hate traffic-ridden streets.'
vectorizer = CountVectorizer(stop_words='english',token_pattern=pattern)
analyze = vectorizer.build_analyzer()
analyze(text)

我也曾尝试使用 nltkregexp_tokenize,正如之前问题中所建议的那样,但它的行为似乎也发生了变化。

最佳答案

有几点需要注意。首先是将所有这些空格、换行符和注释添加到模式字符串中会使所有这些字符成为正则表达式的一部分。看这里:

import re
>>> re.match("[0-9]","3")
<_sre.SRE_Match object at 0x104caa920>
>>> re.match("[0-9] #a","3")
>>> re.match("[0-9] #a","3 #a")
<_sre.SRE_Match object at 0x104caa718>

第二个是在字符串中构造正则表达式模式时需要转义特殊序列。例如 pattern = "\w" 确实需要是 pattern = "\\w"。一旦你考虑了这些事情,你应该能够为你想要的分词器编写正则表达式。例如,如果您只想添加连字符,则可以使用以下方法:

>>> from sklearn.feature_extraction.text import CountVectorizer
>>> pattern = "(?u)\\b[\\w-]+\\b"
>>>
>>> text = 'I hate traffic-ridden streets.'
>>> vectorizer = CountVectorizer(stop_words='english',token_pattern=pattern)
>>> analyze = vectorizer.build_analyzer()
>>> analyze(text)
[u'hate', u'traffic-ridden', u'streets']

关于python - scikit-learn:标记化时不要分隔带连字符的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38115367/

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