You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BLTK预处理孟加拉语数据集时遇ModuleNotFoundError求助

孟加拉语数据集BLTK预处理报错问题

我尝试使用BLTK对孟加拉语数据集进行预处理,但运行时出现错误。已安装并更新scikit-learn,仍不清楚错误原因。

我的代码

from bltk.langtools import remove_stopwords
from bltk.langtools import Tokenizer
from bltk.langtools import UgraStemmer
from bltk.langtools import PosTagger
import re

tokenizer = Tokenizer()
stemmer = UgraStemmer()


corpus = []
y_val = []
for i in range(0, len(messages)):
    review = messages['text'][i]
    y_val_temp = messages['Class'][i]
    review = "".join(i for i in review if i in ["।"] or 2432 <= ord(i) <= 2559 or ord(i)== 32)
    review =" ".join(review.split())
    
    review = tokenizer.word_tokenizer(review)
    #print(review)
    while("" in review) : 
        review.remove("") 
    review = remove_stopwords(review, level='hard')
    #print(review)
    review = stemmer.stem(review)
    #print(review)
    if(review==None):
        continue
    review = ' '.join(review)
    
    corpus.append(review)
    y_val.append(y_val_temp)

报错信息

ModuleNotFoundError                       Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_11864/3574551415.py in <module>
      6 
      7 tokenizer = Tokenizer()
----> 8 stemmer = UgraStemmer()
      9 
     10 

D:\Anaconda\lib\site-packages\bltk\langtools\stemmer.py in __init__(self)
      5 class UgraStemmer:
      6     def __init__(self):
----> 7         self.pos_tagger = PosTagger()
      8         self.pronoun_values = list(pronouns.values())
      9         self.pronoun_keys = list(pronouns.keys())

D:\Anaconda\lib\site-packages\bltk\langtools\pos_tagger.py in __init__(self)
     10 class PosTagger:
     11     def __init__(self):
---&gt; 12         self.data = PosTagger.get_data()
     13 
     14     @staticmethod

D:\Anaconda\lib\site-packages\bltk\langtools\pos_tagger.py in get_data()
     15     def get_data():
     16         with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..//data//pos_tagger.pkl"), "rb") as tagger:
---&gt; 17             pos_tagger = pickle.load(tagger)
     18             return pos_tagger
     19 

ModuleNotFoundError: No module named 'sklearn.feature_extraction.dict_vectorizer'
问题原因与解决办法

原因

scikit-learn版本更新后,sklearn.feature_extraction.dict_vectorizer模块的路径发生了变更——旧版本使用该路径,新版本中模块结构调整为sklearn.feature_extraction._dict_vectorizer(内部模块)。而BLTK自带的pos_tagger.pkl模型文件是用旧版scikit-learn序列化的,加载时会寻找旧的模块路径,因此触发ModuleNotFoundError。

解决办法

  • 方法一:安装兼容版scikit-learn(推荐新手)
    安装0.22.x版本的scikit-learn,这个版本仍保留旧的模块路径,执行命令:

    pip install scikit-learn==0.22.2.post1
    
  • 方法二:模块路径映射(无需降级)
    在代码最开头添加以下代码,将旧模块名映射到新的路径,让pickle加载时能找到对应模块:

    import sklearn.feature_extraction._dict_vectorizer
    import sys
    sys.modules['sklearn.feature_extraction.dict_vectorizer'] = sklearn.feature_extraction._dict_vectorizer
    
  • 方法三:修改BLTK源码(不推荐)
    找到BLTK安装目录下的pos_tagger.py文件,修改模型加载相关逻辑,但该操作对新手不友好,容易引发其他问题。

内容的提问来源于stack exchange,提问作者Anower Hossen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:45:30