gpt4 book ai didi

python - 与正则表达式相关的CountVectorizer预处理

转载 作者:行者123 更新时间:2023-12-01 06:20:43 27 4
gpt4 key购买 nike

我正在使用 CountVectorizer/logistic 回归进行文本处理,并比较无预处理与预处理的 f1 分数。我想使用正则表达式进行预处理,所以我构建了如下代码

def better_preprocessor(s):
lower = s.lower()
lower = re.sub(r'^\w{8,}$', lambda x:x[:7], lower)
return lower

def a():
cv = CountVectorizer()
train = cv.fit_transform(train_data)
features = cv.get_feature_names()
cv_dev = CountVectorizer(vocabulary = features)
dev = cv_dev.fit_transform(dev_data)
print(features)

lgr = LogisticRegression(C=0.5, solver="liblinear", multi_class="auto")
lgr.fit(train, train_labels)
lgr_pred = lgr.predict(dev)
score = metrics.f1_score(dev_labels, lgr_pred, average="weighted")
print('No preprocessing score:', score)

cv_im = CountVectorizer(preprocessor=better_preprocessor)
train_im = cv_im.fit_transform(train_data)
features_im = cv_im.get_feature_names()
cv_im_dev = CountVectorizer(preprocessor=better_preprocessor, vocabulary = features_im)
dev_im = cv_im_dev.fit_transform(dev_data)

lgr.fit(train_im, train_labels)
lgr_pred_im = lgr.predict(dev_im)
score_im = metrics.f1_score(dev_labels, lgr_pred_im, average="weighted")
print('Preprocessing score', score_im)
print(len(features)-len(features_im))
print(features_im)

a()

我尝试将大于或等于 8 的单词长度截断为 7,但是当我使用 get_feature_names 检查词汇表时,没有任何变化。我不知道应该在哪里解决这个问题。

最佳答案

为此您不需要任何正则表达式。使用

def better_preprocessor(s):
if len(s) >= 8:
return s.lower()[:7]
else:
return s.lower()

re.sub(r'^\w{8,}$', lambda x:x[:7], lower) 代码采用 lower 字符串并尝试匹配 ^\w{8,}$:

  • ^ - 字符串开头
  • \w{8,} - 八个或更多单词字符
  • $ - 字符串结尾。

然后,lambda x:x[:7] 尝试获取匹配(其中 x 是匹配数据对象),并且您尝试对匹配数据对象进行切片。也许您打算使用 x.group()[:7],但在这里它仍然是一种矫枉过正。

如果您打算从字符串中提取所有单词并截断它们,则需要指定单词是什么并使用

def better_preprocessor(s):
return re.sub(r'\b(\w{7})\w+', r'\1', s.lower())

请参阅regex demo

  • \b - 字边界
  • (\w{7}) - 第 1 组(在替换模式中用 \1 引用):七个单词字符
  • \w+ - 1+ 个单词字符

关于python - 与正则表达式相关的CountVectorizer预处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60376343/

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