gpt4 book ai didi

python - 如何在 countVectorizer 中将带有小数或逗号的数字视为一个单词

转载 作者:行者123 更新时间:2023-12-01 07:28:32 25 4
gpt4 key购买 nike

我正在清理文本,然后将其传递给 CountVectorizer 函数,以计算每个单词在文本中出现的次数。问题在于它将 10,000x 视为两个单词(10 和 000x)。同样,对于 5.00,它将 5 和 00 视为两个不同的单词。

我尝试过以下方法:

from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd

corpus=["userna lightning strike megawaysnew release there's many
ways win lightning strike megaways. start epic adventure today, seek
mystery symbols, re-spins wild multipliers, mega spins gamble lead wins
10,000x bet!"]
analyzer = CountVectorizer().build_analyzer()
vectorizer = CountVectorizer()


result = vectorizer.fit_transform(corpus).todense()
cols = vectorizer.get_feature_names()

res_df45 = pd.DataFrame(result, columns = cols)

在数据框中,“10”和“000x”的计数均为 1,但我需要将它们视为一个单词 (10,000x)。我怎样才能做到这一点?

最佳答案

分词器用于 token_pattern 参数的默认正则表达式模式是:

token_pattern='(?u)\\b\\w\\w+\\b'

因此,单词由开头和结尾的 \b 单词边界定义,其中 \w\w+ 一个字母数字字符,后跟一个或多个字母数字字符边界。要解释正则表达式,必须使用 \\ 转义反斜杠。

因此您可以将 token 模式更改为:

token_pattern='\\b(\\w+[\\.,]?\\w+)\\b'

说明:[\\.,]?允许可选出现 .,。第一个出现的字母数字字符 \w 的正则表达式必须扩展为 \w+ 以匹配标点符号之前具有多个数字的数字。

对于您稍微调整的示例:

corpus=["I am userna lightning strike 2.5 release re-spins there's many 10,000x bet in NA!"]
analyzer = CountVectorizer().build_analyzer()
vectorizer = CountVectorizer(token_pattern='\\b(\\w+[\\.,]?\\w+)\\b')
result = vectorizer.fit_transform(corpus).todense()
cols = vectorizer.get_feature_names()
print(pd.DataFrame(result, columns = cols))

输出:

   10,000x  2.5  am  bet  in  lightning  many  na  re  release  spins  strike  there  userna  
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1

或者,您可以修改输入文本,例如将小数点 . 替换为下划线 _ 并删除数字之间的逗号。

import re

corpus = ["I am userna lightning strike 2.5 release re-spins there's many 10,000x bet in NA!"]
for i in range(len(corpus)):
corpus[i] = re.sub("(\d+)\.(\d+)", "\\1_\\2", corpus[i])
corpus[i] = re.sub("(\d+),(\d+)", "\\1\\2", corpus[i])
analyzer = CountVectorizer().build_analyzer()
vectorizer = CountVectorizer()
result = vectorizer.fit_transform(corpus).todense()
cols = vectorizer.get_feature_names()
print(pd.DataFrame(result, columns = cols))

输出:

   10000x  2_5  am  bet  in  lightning  many  na  re  release  spins  strike  there  userna
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1

关于python - 如何在 countVectorizer 中将带有小数或逗号的数字视为一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57325870/

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