from .ChineseAnalyzer import ChineseAnalyzer ImportError: No module named ChineseAnalyzer

本文介绍了一位开发者在实现Whoosh结合Jieba进行全文检索时遇到的导入ChineseAnalyzer模块错误,并分享了解决方法:删除import语句后的多余空格。

今天闲来无事写了个whoosh+jieba分词的全文检索,按着网上教程做,结果报了from .ChineseAnalyzer import ChineseAnalyzer
ImportError: No module named ChineseAnalyzer这个错,貌似是没找到这个包,解决方法很简单。。。。from .ChineseAnalyzer import ChineseAnalyzer后面有个空格。。。。删了它!!!

import sys import os from PyQt5.QtWidgets import ( QApplication, QWidget, QLabel, QLineEdit, QTextEdit, QPushButton, QVBoxLayout, QHBoxLayout, QMessageBox ) from whoosh.index import create_in, open_dir from whoosh.fields import Schema, TEXT, ID from whoosh.qparser import QueryParser import jieba from whoosh.analysis import Analyzer # 自定义中文分词器 class ChineseAnalyzer(Analyzer): def __init__(self): self.tokenizer = None def __call__(self, value, **kwargs): assert isinstance(value, str) tokens = [] pos = 0 for word in jieba.cut(value, cut_all=False): tokens.append((word, pos)) pos += len(word) return [(t[0], t[1]) for t in tokens] # Whoosh 索引结构 schema = Schema( title=ID(stored=True), content=TEXT(analyzer=ChineseAnalyzer()) ) # 索引目录 INDEX_DIR = "my_index" class WhooshGUI(QWidget): def __init__(self): super().__init__() self.setWindowTitle("Whoosh 搜索工具") self.init_ui() self.ensure_index() def init_ui(self): layout = QVBoxLayout() # 标题输入 self.title_input = QLineEdit() layout.addWidget(QLabel("标题:")) layout.addWidget(self.title_input) # 内容输入 self.content_input = QTextEdit() layout.addWidget(QLabel("内容:")) layout.addWidget(self.content_input) # 添加按钮 add_btn = QPushButton("添加文档") add_btn.clicked.connect(self.add_document) layout.addWidget(add_btn) # 搜索输入 self.search_input = QLineEdit() layout.addWidget(QLabel("搜索内容:")) layout.addWidget(self.search_input) # 搜索按钮 search_btn = QPushButton("执行搜索") search_btn.clicked.connect(self.search_content) layout.addWidget(search_btn) # 结果显示 self.result_area = QTextEdit() self.result_area.setReadOnly(True) layout.addWidget(QLabel("搜索结果:")) layout.addWidget(self.result_area) self.setLayout(layout) def ensure_index(self): if not os.path.exists(INDEX_DIR): os.makedirs(INDEX_DIR) self.ix = create_in(INDEX_DIR, schema) else: self.ix = open_dir(INDEX_DIR) def add_document(self): title = self.title_input.text() content = self.content_input.toPlainText() if not title or not content: QMessageBox.warning(self, "警告", "标题或内容不能为空!") return writer = self.ix.writer() writer.add_document(title=title, content=content) writer.commit() QMessageBox.information(self, "成功", "文档已添加!") def search_content(self): keyword = self.search_input.text() if not keyword: QMessageBox.warning(self, "警告", "请输入搜索关键词!") return with self.ix.searcher() as searcher: query = QueryParser("content", self.ix.schema).parse(keyword) results = searcher.search(query) self.result_area.clear() if not results: self.result_area.setText("没有找到匹配的内容。") return for hit in results: self.result_area.append(f"标题:{hit['title']}") self.result_area.append(f"内容:{hit['content']}") self.result_area.append("-" * 30) if __name__ == "__main__": app = QApplication(sys.argv) window = WhooshGUI() window.resize(600, 500) window.show() sys.exit(app.exec_()) 解释一下
08-06
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值