添加对 CountVectorizer (sklearn) 的词干支持

2024-03-27

我正在尝试使用 sklearn 将词干添加到 NLP 中的管道中。

from nltk.stem.snowball import FrenchStemmer

stop = stopwords.words('french')
stemmer = FrenchStemmer()


class StemmedCountVectorizer(CountVectorizer):
    def __init__(self, stemmer):
        super(StemmedCountVectorizer, self).__init__()
        self.stemmer = stemmer

    def build_analyzer(self):
        analyzer = super(StemmedCountVectorizer, self).build_analyzer()
        return lambda doc:(self.stemmer.stem(w) for w in analyzer(doc))

stem_vectorizer = StemmedCountVectorizer(stemmer)
text_clf = Pipeline([('vect', stem_vectorizer), ('tfidf', TfidfTransformer()), ('clf', SVC(kernel='linear', C=1)) ])

当将此管道与 sklearn 的 CountVectorizer 一起使用时,它可以工作。如果我手动创建这样的功能,它也可以工作。

vectorizer = StemmedCountVectorizer(stemmer)
vectorizer.fit_transform(X)
tfidf_transformer = TfidfTransformer()
X_tfidf = tfidf_transformer.fit_transform(X_counts)

EDIT:

如果我在 IPython Notebook 上尝试此管道,它会显示 [*] 并且没有任何反应。当我查看终端时,出现以下错误:

Process PoolWorker-12:
Traceback (most recent call last):
  File "C:\Anaconda2\lib\multiprocessing\process.py", line 258, in _bootstrap
    self.run()
  File "C:\Anaconda2\lib\multiprocessing\process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Anaconda2\lib\multiprocessing\pool.py", line 102, in worker
    task = get()
  File "C:\Anaconda2\lib\site-packages\sklearn\externals\joblib\pool.py", line 360, in get
    return recv()
AttributeError: 'module' object has no attribute 'StemmedCountVectorizer'

Example

这是完整的例子

from sklearn.pipeline import Pipeline
from sklearn import grid_search
from sklearn.svm import SVC
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from nltk.stem.snowball import FrenchStemmer

stemmer = FrenchStemmer()
analyzer = CountVectorizer().build_analyzer()

def stemming(doc):
    return (stemmer.stem(w) for w in analyzer(doc))

X = ['le chat est beau', 'le ciel est nuageux', 'les gens sont gentils', 'Paris est magique', 'Marseille est tragique', 'JCVD est fou']
Y = [1,0,1,1,0,0]

text_clf = Pipeline([('vect', CountVectorizer()), ('tfidf', TfidfTransformer()), ('clf', SVC())])
parameters = { 'vect__analyzer': ['word', stemming]}

gs_clf = grid_search.GridSearchCV(text_clf, parameters, n_jobs=-1)
gs_clf.fit(X, Y)

如果您从参数中删除词干,它将起作用,否则它将不起作用。

UPDATE:

问题似乎出在并行化过程中,因为当删除n_职位=-1问题消失。


您可以将可调用对象传递为analyzer to the CountVectorizer构造函数提供自定义分析器。这似乎对我有用。

from sklearn.feature_extraction.text import CountVectorizer
from nltk.stem.snowball import FrenchStemmer

stemmer = FrenchStemmer()
analyzer = CountVectorizer().build_analyzer()

def stemmed_words(doc):
    return (stemmer.stem(w) for w in analyzer(doc))

stem_vectorizer = CountVectorizer(analyzer=stemmed_words)
print(stem_vectorizer.fit_transform(['Tu marches dans la rue']))
print(stem_vectorizer.get_feature_names())

打印出:

  (0, 4)    1
  (0, 2)    1
  (0, 0)    1
  (0, 1)    1
  (0, 3)    1
[u'dan', u'la', u'march', u'ru', u'tu']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

添加对 CountVectorizer (sklearn) 的词干支持 的相关文章

随机推荐

  • 初始化类成员向量的大小失败

    我是 C 新手 遇到了这个问题 这是我的代码 class A std vector
  • 在为项目构建不同的 Eclipse CDT 共享资源文件夹中

    我有一组 Eclipse c 项目 它们都引用公共共享代码库 同一文件夹中的 c 和 h 文件的混合 但会根据每个项目以不同的方式构建该代码 可以在每个项目内编辑公共代码库 但这些编辑将是在所有项目中进行的修复 除了通过定义的构建选项之外
  • Flask 结构——无法从 __init__.py 导入应用程序

    我是 python 的初学者 并且在使用设置应用程序的结构时遇到了很多麻烦 init py即使在搜索了几个教程之后 目前 我当前的目录结构如下所示 parent myapp init py views py virtualenv 以前 我有
  • Java 8 Lambda,过滤HashMap,无法解析方法

    我对 Java 8 的新功能有点陌生 我正在学习如何按条目过滤地图 我看过本教程 http www leveluplunch com java examples filter map by value and 这个帖子 https stac
  • 有界上下文共享相同的聚合

    DDD 公开了有界上下文 领域模型 聚合 但我经常错过业务规则的关键点 我想知道业务规则如何集成到这种方法中 这是一个例子 假设您在一家信贷公司中有 2 个有界上下文 一项用于追偿债务 另一项用于提前退款 这些背景嵌入了真正的业务特性 从概
  • Term::ReadKey,原始模式下的非阻塞读取:检测到 EOF?

    当我将内容通过管道传输到程序中时 它似乎没有获得任何像 0x4 这样的字符来指示 EOF echo abc map cat saw a x61 saw b x62 saw c x63 saw x0A zzzbc C 我必须按 Ctrl C
  • 如何直接从我的 Gitlab 存储库部署到 Heroku

    在我的团队中 我们使用 Gitlab 作为远程存储库 因此我们正在寻找一种解决方案来将应用程序自动部署到 Heroku 我们找到了 Codeship 用于从 Github 自动将应用程序部署到 Heroku 有小费吗 技巧 如果您不准备使用
  • 波特 油炸的去梗

    为什么波特词干算法在线 http text processing com demo stem http text processing com demo stem stem fried to fri并不是fry 我不记得任何以以下结尾的单词
  • Mjpeg 在最近的 Mobile Safari 上损坏了?

    我正在处理来自 IP 摄像机的实时 mjpeg 流 发现最近发布的 Mobile Safari 似乎对 mjpeg 的支持被破坏了 我正在使用一个带有嵌入图像的简单 HTML 测试页面 如下所示 img src http ip addres
  • 使用流复制文件

    以下示例演示如何使用流复制文件 private void copyWithStreams File aSourceFile File aTargetFile boolean aAppend log Copying files with st
  • Android底部导航视图项目图标大小[重复]

    这个问题在这里已经有答案了 I need to do a bottom navigation view in Android like this I tried and now I have something like this 如何增加
  • 在 Clojure 中实现 cron 类型调度程序

    我正在寻找任何可以在给定时间触发事件的 clojure 方法 例如 我希望一个特定的进程在上午 9 30 启动 然后我可以触发另一个进程在半小时后开始运行 等等 提前致谢 更新2 感谢 arthur ulfeoldt 和 unknown p
  • 是否可以将 Camera2 与 Google Vision API 一起使用

    是否可以仅使用 Camera2 和 Google Vision API 来检测人脸 我找不到整合它的方法 是的 可以将 Camera2 API 与 Google Vision API 一起使用 首先 Google Vision API 人脸
  • 使用 SDK 在 azure 函数中将 Azure blob 存储转换为 JSON

    我正在尝试创建一个计时器触发器 azure 函数 该函数从 blob 获取数据 聚合数据 并将聚合结果放入 cosmosDB 中 我之前尝试使用 azure 函数中的绑定来使用 blob 作为输入 但我被告知这是不正确的 请参阅此线程 Az
  • 如何以编程方式读取 EF DbContext 元数据?

    我有使用 EF CodeFirst 5 的应用程序 dll 版本 4 4 0 0 在 net 4 0 上 我需要能够读取实体元数据 以便我可以针对给定的条目类型获取以下信息 哪些属性是一对多关系 引用实体 哪些属性是多对一关系 引用当前实体
  • 从 SQL Server 中的日期时间字段中获取“日期”

    我有一个日期列 其中日期以格式显示2009 11 18 10 55 28 370 我只想从该值中获取日期 而不是时间 我怎么做 如果您使用的是 SQL Server 2008 则现在有 DATE 数据类型 让它变得更加自然 SELECT C
  • PHP Curl 收到 502:错误网关错误

    在浏览器中 该 url 有效 当我尝试使用 PHP curl 时 我得到了 502 Bad Gateway error 这是我的代码 ch curl init curl setopt ch CURLOPT URL url query str
  • popen vs system:popen 和 system 一样邪恶吗?

    popen 缓冲输出 而系统则不缓冲 这是唯一的区别吗 据我所知 popen 和 system 都通过 shell 运行命令 然而 popen 是evil http www cplusplus com forum articles 1115
  • 使用“using”关键字使继承的构造函数公开[重复]

    这个问题在这里已经有答案了 我正在尝试测试我的类的受保护方法和构造函数 为此 我尝试对其进行子类化 并使用 C 11 将其成员重新导出为 publicusing关键词 class Foo protected Foo int i void r
  • 添加对 CountVectorizer (sklearn) 的词干支持

    我正在尝试使用 sklearn 将词干添加到 NLP 中的管道中 from nltk stem snowball import FrenchStemmer stop stopwords words french stemmer French