豌豆Ai站群搜索引擎系统 V.25.10.25 网址:www.wd.chat

🗣 Wd提问: python搜索引擎

🤖 Ai回答:
在 Python 中构建一个简单的搜索引擎可以分为几个步骤:数据收集、文本预处理、建立索引、查询处理和结果排序。下面是一个基础的倒排索引(Inverted Index)搜索引擎示例,适用于小规模文本数据。

🌐 简易 Python 搜索引擎(基于倒排索引)

✅ 功能:
支持关键词搜索
使用倒排索引提高检索效率
支持模糊匹配(部分词干提取)
可扩展性强

1、安装依赖(可选)
bash
pip install nltk

我们使用 `nltk` 进行文本处理(如分词、词干提取),你也可以不用,但建议安装以提升效果。

python
import nltk
nltk.download('punkt')
nltk.download('stopwords')

2、完整代码实现

python
import re
from collections import defaultdict
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer

下载必要资源(第一次运行时启用)
import nltk
nltk.download('punkt')
nltk.download('stopwords')

class SimpleSearchEngine:
def __init__(self):
self.documents = {} {doc_id: content}
self.inverted_index = defaultdict(set) {term: {doc_ids}}
self.stop_words = set(stopwords.words('english'))
self.stemmer = PorterStemmer()

def preprocess(self, text):
文本预处理:转小写、分词、去停用词、词干化
text = re.sub(r'[^a-zA-Z\s]', '', text.lower())
tokens = word_tokenize(text)
tokens = [self.stemmer.stem(token) for token in tokens if token not in self.stop_words]
return tokens

def add_document(self, doc_id, content):
添加文档到搜索引擎
self.documents[doc_id] = content
words = self.preprocess(content)
for word in words:
self.inverted_index[word].add(doc_id)

def search(self, query, top_k=5):
搜索并返回相关文档ID列表
query_words = self.preprocess(query)
result_docs = None

for word in query_words:
if word in self.inverted_index:
if result_docs is None:
result_docs = self.inverted_index[word].copy()
else:
result_docs &= self.inverted_index[word] 交集(AND语义)
else:
result_docs = set() 如果任一词无匹配,则结果为空
break

result_docs = list(result_docs) if result_docs else []

按关键词在文档中出现频率简单打分排序
scored_docs = []
for doc_id in result_docs:
content = self.documents[doc_id].lower()
score = sum(content.count(word) for word in query_words)
scored_docs.append((doc_id, score))

scored_docs.sort(key=lambda x: -x[1])
return [doc_id for doc_id, _ in scored_docs[:top_k]]

=== 使用示例 ===
if __name__ == __main__:
engine = SimpleSearchEngine()

添加一些测试文档
engine.add_document(1, Python is a powerful programming language.)
engine.add_document(2, I love coding in Python for data science.)
engine.add_document(3, Machine learning uses Python and R.)
engine.add_document(4, Java is another popular programming language.)
engine.add_document(5, Web development with JavaScript and Python.)

搜索
query = programming language Python
results = engine.search(query)

print(fSearch results for '{query}':)
for doc_id in results:
print(fDoc {doc_id}: {engine.documents[doc_id]})

🔍 输出示例:

Search results for 'programming language Python':
Doc 1: Python is a powerful programming language.
Doc 2: I love coding in Python for data science.
Doc 5: Web development with JavaScript and Python.

🧩 扩展功能建议

| 功能 | 实现方式 |

| OR 查询 | 使用集合并集 `union` |
| TF-IDF 排序 | 计算每个文档的 TF-IDF 分数 |
| 高亮关键词 | 返回结果中加 HTML 标签或颜色 |
| 支持中文 | 使用 jieba 分词 + 去除英文停用词 |
| 持久化索引 | 保存为 JSON 或 SQLite |
| Web 接口 | 用 Flask/FastAPI 提供 REST API |

💡 示例:支持 OR 的搜索
python
def search_or(self, query):
query_words = self.preprocess(query)
result_docs = set()
for word in query_words:
if word in self.inverted_index:
result_docs |= self.inverted_index[word]
return list(result_docs)

🚀 更高级选择(生产环境)

如果你需要更强大的搜索引擎,推荐结合以下工具:

| 工具 | 说明 |

| Elasticsearch + elasticsearch-py | 全文搜索工业级解决方案 |
| Whoosh | 纯 Python 实现的全文搜索引擎 |
| MeiliSearch | 轻量级、快速、支持拼音/中文 |
| SQLite FTS5 | 内嵌全文搜索,适合小型应用 |

🔗 Whoosh 示例(轻量替代)

bash
pip install whoosh

python
import os
from whoosh.index import create_in
from whoosh.fields import Schema, TEXT, ID
from whoosh.qparser import QueryParser

schema = Schema(title=TEXT(stored=True), content=TEXT(stored=True))
if not os.path.exists(indexdir):
os.mkdir(indexdir)

ix = create_in(indexdir, schema)
writer = ix.writer()

writer.add_document(title=Python Guide, content=Learn Python programming language)
writer.add_document(title=Data Science, content=Python is used in data science)
writer.commit()

with ix.searcher() as searcher:
query = QueryParser(content, ix.schema).parse(python)
results = searcher.search(query)
for r in results:
print(r['title'], r['content'])

如果你想做一个支持中文的搜索引擎或者网页爬虫+搜索系统,我也可以继续帮你扩展!

是否需要支持中文?是否需要从网页抓取内容?欢迎告诉我你的具体需求 😊

Ai作答

📣 商家广告


广告招商

广东过滤器

贵阳用友软件

广告招商

广告招商


0

IP地址: 225.1.96.223

搜索次数: 69

提问时间: 2025-11-18 01:29:15

🛒 域名购买

❓️ 热门提问

🌐 域名评估

最新挖掘

🖌 热门作画

🤝 关于我们

🗨 加入群聊

🔗 友情链接

🧰 站长工具
📢

温馨提示

本站所有 问答 均由Ai自动分析整理,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。

👉

技术支持

本站由 🟢 豌豆Ai 提供技术支持,使用的最新版: 豌豆Ai站群搜索引擎系统 V.25.10.25 搭建本站。

上一篇 82182 82183 82184 下一篇