首页 > 编程问答 >在 TfidfVectorizer 标记化后删除二元组

在 TfidfVectorizer 标记化后删除二元组

时间:2024-08-06 03:49:07浏览次数:14  
标签:python scikit-learn nlp preprocessor tfidfvectorizer

我正在尝试删除由 TfidfVectorizer 创建的二元组。我正在使用 text.TfidfVectorizer,以便我可以使用自己的预处理器函数。

Init


    from sklearn.feature_extraction.text import ENGLISH_STOP_WORDS as stop_words
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.feature_extraction import text

测试字符串和预处理器函数:


    doc2 = ['this is a test past performance here is another that has aa aa adding builing cat dog horse hurricane', 
            'another that has aa aa and start date and hurricane hitting south carolina']
    
    def remove_bigrams(doc):
    
        
        gram_2 = ['past performance', 'start date', 'aa aa']
        
        res = []
        
        for record in doc:
     
            the_string = record
            for phrase in gram_2:
                the_string = the_string.replace(phrase, "")
            
            res.append(the_string)
                
        return res
     
    remove_bigrams(doc2)

My TfidfVectorizer实例化和 fit_transform


    custom_stop_words = [i for i in stop_words]
    
    vec = text.TfidfVectorizer(stop_words=custom_stop_words,
     analyzer='word',
     ngram_range = (2,2),
     preprocessor = remove_bigrams)

    features = vec.fit_transform(doc2)


这是我的错误,这让我抓狂,我已经尝试了我能想到的一切并搜索了堆栈交换。

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [49], in <cell line: 5>()
      3 #t3_cv = CountVectorizer(t2, stop_words = stop_words)
      4 vec = text.TfidfVectorizer(stop_words=custom_stop_words, analyzer='word', ngram_range = (2,2), preprocessor = remove_bigrams)
----> 5 features = vec.fit_transform(doc2)

File c:\Development_Solutions\Sandbox\SBVE\lib\site-packages\sklearn\feature_extraction\text.py:2079, in TfidfVectorizer.fit_transform(self, raw_documents, y)
   2072 self._check_params()
   2073 self._tfidf = TfidfTransformer(
   2074     norm=self.norm,
   2075     use_idf=self.use_idf,
   2076     smooth_idf=self.smooth_idf,
   2077     sublinear_tf=self.sublinear_tf,
   2078 )
-> 2079 X = super().fit_transform(raw_documents)
   2080 self._tfidf.fit(X)
   2081 # X is already a transformed view of raw_documents so
   2082 # we set copy to False

File c:\Development_Solutions\Sandbox\SBVE\lib\site-packages\sklearn\feature_extraction\text.py:1338, in CountVectorizer.fit_transform(self, raw_documents, y)
   1330             warnings.warn(
   1331                 "Upper case characters found in"
   1332                 " vocabulary while 'lowercase'"
   1333                 " is True. These entries will not"
   1334                 " be matched with any documents"
   1335             )
   1336             break
-> 1338 vocabulary, X = self._count_vocab(raw_documents, self.fixed_vocabulary_)
   1340 if self.binary:
   1341     X.data.fill(1)

File c:\Development_Solutions\Sandbox\SBVE\lib\site-packages\sklearn\feature_extraction\text.py:1209, in CountVectorizer._count_vocab(self, raw_documents, fixed_vocab)
   1207 for doc in raw_documents:
   1208     feature_counter = {}
-> 1209     for feature in analyze(doc):
   1210         try:
   1211             feature_idx = vocabulary[feature]

File c:\Development_Solutions\Sandbox\SBVE\lib\site-packages\sklearn\feature_extraction\text.py:113, in _analyze(doc, analyzer, tokenizer, ngrams, preprocessor, decoder, stop_words)
    111     doc = preprocessor(doc)
    112 if tokenizer is not None:
--> 113     doc = tokenizer(doc)
    114 if ngrams is not None:
    115     if stop_words is not None:

TypeError: expected string or bytes-like object

这个错误信息 "TypeError: expected string or bytes-like object" 告诉你,你的分词器(tokenizer)收到的是一个列表,而不是字符串。这是因为你的预处理器 remove_bigrams 返回的是一个列表,而分词器期望的是一个字符串。

你可以通过修改你的 remove_bigrams 函数,使其返回一个字符串而不是一个列表来解决这个问题。你可以使用空格连接处理后的单词:

def remove_bigrams(doc):
    gram_2 = ['past performance', 'start date', 'aa aa']
    the_string = doc
    for phrase in gram_2:
        the_string = the_string.replace(phrase, "")
    return the_string

vec = text.TfidfVectorizer(stop_words=custom_stop_words, 
                            analyzer='word', 
                            ngram_range=(2,2), 
                            preprocessor=remove_bigrams)

features = vec.fit_transform(doc2)

这样修改后,你的预处理器将会返回一个字符串,分词器就可以正常工作了。

另外,当你使用 ngram_range = (2,2) 时,你实际上是在告诉 TfidfVectorizer 只提取二元词组。如果你想要提取单词而不是二元词组,你应该使用 ngram_range = (1,1)

标签:python,scikit-learn,nlp,preprocessor,tfidfvectorizer
From: 78836208

相关文章

  • 【香橙派系列教程】(七)香橙派下的Python3安装
    【七】香橙派下的Python3安装为接下来的Linux图像识别智能垃圾桶做准备。图像处理使用京东SDK只支持pyhton和Java接口,目的是引入C语言的Python调用,感受大厂做的算法bug此接口是人工智能接口,京东识别模型是通过训练后的模型,精准度取决于训练程度,人工智能范畴在常规嵌入式......
  • vnpy,一个不可思议的Python库!
    vn.py是一个开源的Python交易编程框架,旨在帮助程序员快速搭建属于自己的量化交易平台。该框架支持股票、期货、外汇等多种金融产品的交易,提供了从数据获取、策略开发到交易执行的全流程支持。如何安装vnpy首先,要使用vnpy,您需要通过Python的包管理工具pip来安装它。以下......
  • Python回溯算法
    回溯算法回溯算法是一种系统的搜索算法,用于解决诸如排列组合、子集生成、图的路径、棋盘问题等问题。其核心思想是通过递归尝试各种可能的解决方案,遇到不满足条件的解时则回退(回溯),继续尝试其他可能性,直到找到所有的解决方案或确认无解。主要步骤:选择路径:在当前步骤选择一个可......
  • [python]使用gunivorn部署fastapi服务
    前言Gunicorn是一种流行的WSGIHTTP服务器,常用于部署Django和Flask等PythonWeb框架程序。Gunicorn具有轻量级、高稳定性和高性能等特性,可以轻易提高PythonWSGIApp运行时的性能。基本原理Gunicorn采用了pre-fork模型,也就是一个工作进程和多个worker进程的工作模式。在这个模......
  • python十六进制编辑器
    源代码:importtkinterastkfromtkinterimportfiledialogimportstructimportbinasciiimportosclassHexEditor:def__init__(self,master):self.master=masterself.master.title("十六进制编辑器")self.master.configure(bg......
  • python项目学习 mediapipe手势识别 opencv可视化显示
    importcv2importmediapipeimportnumpydefget_angle(vector1,vector2):#角度计算angle=numpy.dot(vector1,vector2)/(numpy.sqrt(numpy.sum(vector1*vector1))*numpy.sqrt(numpy.sum(vector2*vector2)))#cos(angle)=向量的点乘/向量的模angle=nump......
  • 【优秀python大屏】基于python flask的广州历史天气数据应用与可视化大屏
    摘要气象数据分析在各行各业中扮演着重要的角色,尤其对于农业、航空、海洋、军事、资源环境等领域。在这些领域中,准确的气象数据可以对预测未来的自然环境变化和采取行动来减轻负面影响的决策起到至关重要的作用。本系统基于PythonFlask框架,通过对气象数据的分析和处理来提供......
  • Python-MNE全套教程(官网翻译)-入门01:概述篇
    目的以牺牲深度为代价进行入门学习,简易学习基本方法开始导入相关库:#License:BSD-3-Clause#CopyrighttheMNE-Pythoncontributors.importnumpyasnpimportmne加载数据MNE-Python数据结构式基于fif格式的,但是对于其他格式也有阅读方法,如https://mne.tools/s......
  • Python-MNE全套教程(官网翻译)-入门05:关于传感器位置
    本教程描述了如何读取和绘制传感器位置,以及MNE-Python如何处理传感器的物理位置。像往常一样,我们将从导入我们需要的模块开始:frompathlibimportPathimportmatplotlib.pyplotaspltimportnumpyasnpimportmne关于montage和layout(蒙太奇和传感器布局)montage......
  • Codeforces Round 963 (Div. 2) A - C 详细题解(思路加代码,C++,Python) -- 来自灰名
    比赛链接:Dashboard-CodeforcesRound963(Div.2)-Codeforces之后有实力了再试试后面的题目,现在要做那些题,起码要理解一个多小时题目A:链接:Problem-A-Codeforces题目大意理解:        极少数不考翻译能读懂的cf题目(bushi)每个测试用例第一行一个n,......