AttributeError: module ‘hanlp.utils.rules‘ has no attribute ‘tokenize_english‘

最近在看Python人工智能20个小时玩转NLP自然语言处理【黑马程序员】_哔哩哔哩_bilibili​​​​​​

在p37文本处理的基本方法中提到了hanlp的使用

其中有这么一段代码,其目的是使用hanlp进行英文分词

import hanlp
tokenizer = hanlp.utils.rules.tokenize_english 
tokenizer('Mr. Hankcs bought hankcs.com for 1.5 thousand dollars.')

 正确执行结果应该为:

['Mr.', 'Hankcs', 'bought', 'hankcs.com', 'for', '1.5', 'thousand', 'dollars', '.']

但,我的环境报错AttributeError: module 'hanlp.utils.rules' has no attribute 'tokenize_english'

我看视频评论很多也报这个错误,但网上的解决方案不仅少,而且我试了好多个都没用。主要原因是:hanlp.utils.rules中没有tokenize_english。但视频有条评论提到“from hanlp.utils.english_tokenize import tokenize_english
在https://github.com/hankcs/HanLP/blob/doc-zh/README.md 查看文件结构”虽然试过但也没效果,想着是不是时间太久,hanlp版本(不知道叫版本还是什么!!!!)不一样。而且看连接中的文件结构也找不到相关的tokenize_english,但给了我个启发,直接去hanlp文件里面找,想着会不会是换的位置不一样,果然在C:\ProgramData\Anaconda3\Lib\site-packages\hanlp\utils\lang中发现有个en的文件,其中的english_tokenizer.py里面就有一个tokenize_english。

于是:

from hanlp.utils.lang.en.english_tokenizer import tokenize_english
tokenizer = tokenize_english
tokenizer('Mr. Hankcs bought hankcs.com for 1.5 thousand dollars.')

可行(结果一样,不知道和视频中hanlp.utils.rules.tokenize_english是不是一个东西,应该是!!!)

当然后面直接用这串代码也行,不过想方便一点与视频里面代码同步,可以在hanlp.utils.rules里面加上

import hanlp.utils.lang.en.english_tokenizer

def tokenize_english(text):
    return hanlp.utils.lang.en.english_tokenizer.tokenize_english(text)

 本人python小白,import导入总感觉有问题,有一点乱,请各位不要笑,大家可以改的简短一点(其实我试了好多自认为没问题的导入方式,结果出现莫名其妙的错误,完全没有规律可言,算了,虽然这个不顺眼,但是符合预期结果就行)!!!!

 即可用视频中的代码:

import hanlp
tokenizer = hanlp.utils.rules.tokenize_english 
tokenizer('Mr. Hankcs bought hankcs.com for 1.5 thousand dollars.')
def parse_corpus(infile, outfile): '''parse the corpus of the infile into the outfile''' space = ' ' i = 0 def tokenize(text): return [lemma(token) for token in text.split()] with open(outfile, 'w', encoding='utf-8') as fout: # wiki = WikiCorpus(infile, lemmatize=False, dictionary={}) # gensim中的维基百科处理类WikiCorpus wiki = WikiCorpus(infile, tokenizer_func=tokenize, dictionary={}) # gensim中的维基百科处理类WikiCorpus for text in wiki.get_texts(): fout.write(space.join(text) + '\n') i += 1 if i % 10000 == 0: logger.info('Saved ' + str(i) + ' articles') 报错D:\软件\python\lib\site-packages\gensim\utils.py:1333: UserWarning: detected Windows; aliasing chunkize to chunkize_serial warnings.warn("detected %s; aliasing chunkize to chunkize_serial" % entity) Traceback (most recent call last): File "D:\pythonFiles\图灵\Python_project\self_learn\大语言模型\WikiExtractor.py", line 52, in <module> parse_corpus(infile, outfile) File "D:\pythonFiles\图灵\Python_project\self_learn\大语言模型\WikiExtractor.py", line 29, in parse_corpus for text in wiki.get_texts(): File "D:\软件\python\lib\site-packages\gensim\corpora\wikicorpus.py", line 693, in get_texts for tokens, title, pageid in pool.imap(_process_article, group): File "D:\软件\python\lib\multiprocessing\pool.py", line 870, in next raise value File "D:\软件\python\lib\multiprocessing\pool.py", line 537, in _handle_tasks put(task) File "D:\软件\python\lib\multiprocessing\connection.py", line 211, in send self._send_bytes(_ForkingPickler.dumps(obj)) File "D:\软件\python\lib\multiprocessing\reduction.py", line 51, in dumps cls(buf, protocol).dump(obj) AttributeError: Can't pickle local object 'parse_corpus.<locals>.tokenize' 怎么优化
06-07
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值