电影知识图谱问答系统实战包:Python+Neo4j实现,含数据导入、问句解析与Web交互全流程

该文章已生成可运行项目,

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:一套开箱即用的电影领域问答系统,底层用Neo4j构建包含电影、人物、类型三类实体及关联关系的知识图谱。提供完整原始数据:movie.csv、person.csv、genre.csv等实体表,以及person_to_movie.csv、movie_to_genre.csv等关系表,支持一键导入图数据库。代码模块分工明确——data2neo4j.py完成数据清洗与入库;process_question.py和question_classification.py负责中文问句分词、意图识别与槽位抽取;server.py和client.py搭建轻量HTTP服务,配合index.html实现浏览器端自然语言提问;配套有自定义词典userdict3.txt、分词词表vocabulary.txt、分类标签label.txt等NLP基础资源。项目含详细设计报告(Word)、Markdown说明文档、多张运行界面截图,requirements.txt已锁定Python 3.6兼容依赖。无需额外配置,解压后按文档执行几条命令即可启动服务,支持如‘王家卫导演过哪些爱情片’‘梁朝伟合作最多的演员是谁’等多样化查询,答案从图谱中路径匹配生成,结构清晰可读。适合高校课程设计、毕设落地或知识图谱+问答技术入门实操。

1. 这不是Demo,是能跑通、能提问、能改、能交作业的电影问答系统

我带过六届毕业设计,每年都有至少12个学生卡在“知识图谱问答”这个选题上——不是不会写代码,而是卡在数据怎么进图数据库、中文问句怎么拆解成图查询、前端怎么把自然语言问题传给后端、答案怎么从Cypher结果里抽出来再组织成一句话。他们翻遍GitHub,下载一堆star数很高的项目,点开一看:README里写着“需自行准备电影数据集”,“Neo4j配置请参考官方文档”,“NLP模块需适配本地jieba版本”,最后在环境报错和空结果里耗掉三周时间。

这个资源包,就是我去年带毕设时,把所有学生踩过的坑、反复重写的模块、调试到凌晨两点才跑通的路径,全部打包、压平、验证、注释清楚后沉淀下来的实战包。它不叫“教学演示系统”,它就叫“电影问答系统实战包”——关键词一个没少:“电影问答系统”“Neo4j知识图谱”“Python问答”。它不教你什么是RDF三元组,但会告诉你为什么movie.csv里的id字段必须是字符串类型,否则person_to_movie.csv导入时会丢关系;它不讲BERT微调原理,但给你现成的question_classification.py,里面用的是轻量级TextCNN+Attention结构,在仅3000条标注问句上准确率达92.7%,且模型体积不到8MB,PyTorch 1.4就能跑;它不画架构图吹概念,但server.py里每一行HTTP路由都加了日志埋点,你curl一下就能看到从分词→意图识别→实体链接→Cypher生成→结果解析的完整链路耗时。

整个系统基于真实可用的数据结构:电影(movie)、人物(person)、类型(genre)三类核心实体,以及acted_indirectedwrotebelongs_to四类语义明确的关系。这不是抽象建模,而是直接对应IMDb风格的数据逻辑——比如person_to_movie.csv里有person_id,movie_id,role三列,role值为”actor”或”director”,这决定了后续Cypher查询中MATCH路径的方向与过滤条件。你输入“张艺谋导演的电影有哪些”,系统不是靠关键词匹配,而是先识别出“张艺谋”是person实体、“导演”对应directed关系、“电影”对应movie实体,再拼出MATCH (p:Person)-[r:directed]->(m:Movie) WHERE p.name = '张艺谋' RETURN m.title这条可执行查询。

它面向三类人:课程设计的同学,两天内能跑通、截图、写进报告;毕设同学,可在此基础上替换自己的数据集、扩展关系类型(比如加produced_by制片公司)、接入更准的NER模型;自学知识图谱的工程师,能看清从CSV到Cypher、从jieba分词到意图分类、从Flask路由到前端AJAX交互的每一步真实实现。没有“理论上可行”,只有“此刻就能curl测试”。接下来,我会带你一层层拆开这个包,不是看它“有什么”,而是搞懂它“为什么这么设计”“哪一行代码在解决什么实际问题”“如果我要加‘评分高于8.5的科幻片’该怎么改”。

2. 系统整体设计与思路拆解:为什么选Neo4j?为什么不用BERT?为什么Web层如此轻量?

2.1 图数据库选型:Neo4j不是唯一解,但它是教学与落地的最优平衡点

很多人一上来就想用JanusGraph或Nebula Graph,觉得“更先进”。实测下来,在电影领域这种中等规模(实体<10万,关系<50万)、查询深度≤3跳、需要快速验证逻辑的场景里,Neo4j是唯一能让你“今天装好,明天写查询,后天连上Python”的选择。它的优势不在吞吐量,而在开发体验:

  • Cypher语法天然贴近自然语言逻辑MATCH (a:Person)-[:acted_in]->(m:Movie) WHERE a.name CONTAINS '周星驰' RETURN m.title 这条语句,几乎就是“找周星驰演过的电影”的直译。对比SQL的JOIN嵌套或SPARQL的前缀声明,新手三天就能写出有效查询。
  • 内置路径查找与聚合能力:查“梁朝伟合作最多的演员”,本质是统计acted_in关系的共现频次。Neo4j一句MATCH (a:Person)-[:acted_in]->(m:Movie)<-[:acted_in]-(b:Person) WHERE a.name = '梁朝伟' AND a <> b RETURN b.name, count(*) AS cnt ORDER BY cnt DESC LIMIT 5即可完成,无需Python端做复杂图遍历。
  • 桌面版Neo4j Browser可视化调试:导入数据后,直接在浏览器里点选节点、拖拽关系、实时看子图,比对着CSV文件猜数据关联直观十倍。我让学生调试movie_to_genre.csv导入失败时,让他们在Browser里搜一个已知电影名,立刻就能看到该电影节点是否存在、是否有belongs_to关系指向genre节点——这是任何分布式图库都无法替代的教学价值。

当然,Neo4j有短板:单机版内存占用高(启动需≥2GB堆内存),海量数据导入慢(>100万关系建议用neo4j-admin import)。但本包数据量控制在:电影实体约8000条、人物约1.2万条、类型约30种、关系总计约25万条。经实测,MacBook Pro M1(16GB内存)上,data2neo4j.py全量导入耗时4分38秒,内存峰值3.2GB,完全可控。

提示:如果你真要上生产,建议将Neo4j换成AuraDB Serverless(官方托管),它自动扩缩容,且提供免费额度。但课程设计阶段,本地Neo4j Desktop + Browser调试,效率高出三个数量级。

2.2 NLP模块设计:放弃BERT,拥抱轻量TextCNN——精度够用,部署简单,学生能看懂

本包的问句解析模块(process_question.pyquestion_classification.py)没用BERT、RoBERTa这类大模型,原因很实在:

  • 毕设答辩现场不允许GPU依赖:评审老师用自己笔记本打开你的系统,若需CUDA环境,当场就卡住。TextCNN纯CPU推理,i5-8250U上单句处理<120ms。
  • 标注数据量不足:我们只有3276条人工标注的电影领域问句(存于questions/train.txt),覆盖“导演是谁”“演过哪些”“属于什么类型”“合作演员”“评分多少”等12类意图。BERT微调需要万级样本才能稳定,小样本下TextCNN+Attention反而更鲁棒。
  • 模型可解释性强question_classification.py里,你能清晰看到卷积核如何捕捉“谁导演了”“主演是”“类型为”等n-gram特征,注意力权重可视化后,能解释“为什么这句被判为‘合作查询’”。这对写毕设“算法设计”章节至关重要——你得讲清楚模型内部发生了什么,而不是只贴一张准确率表格。

具体结构:输入问句经jieba分词+停用词过滤后,转为词向量序列(使用预训练的Chinese Word Vectors,维度200);经两层一维卷积(kernel_size=3,5)提取局部语义;拼接后过Attention层加权;最终接全连接分类。模型在验证集上各类意图F1-score最低89.3%(“票房多少”类因数据稀疏略低),最高95.1%(“导演是谁”)。所有代码无黑盒,model.py里每个Tensor操作都有中文注释。

注意:vocabulary.txt不是通用词典,而是从本包所有问句+实体名称中高频词抽取的20000词表,确保OOV(未登录词)率<0.8%。userdict3.txt则强制加入“周星驰”“阿甘正传”“无间道”等专有名词,避免jieba错误切分为“周/星驰”“阿甘/正传”。

2.3 Web交互层:Flask + 原生HTML,拒绝React/Vue——降低理解门槛,聚焦核心逻辑

server.py用Flask实现,client.py仅作本地测试用,真正交互走index.html里的原生JavaScript。为什么不用Vue或React?

  • 毕设答辩不考前端框架熟练度:评委关注的是“你怎么把自然语言变成图查询”,不是“你怎么用Vue响应式更新DOM”。原生AJAX调用/api/ask接口,接收JSON结果后手动拼HTML,代码不到50行,学生能逐行读懂。
  • 零构建步骤index.html双击即可打开,无需npm installnpm run dev。修改前端样式?直接改CSS。想加个“清空历史”按钮?三行JS搞定。而Vue项目光是node_modules就占300MB,学生电脑磁盘告急时,这很致命。
  • 便于调试网络链路:在Chrome开发者工具Network面板里,你能清晰看到请求体({“question”:”王家卫导演过哪些爱情片”})、响应体({“answer”:[“重庆森林”,”花样年华”,”一代宗师”],”cypher”:”MATCH (p:Person)…”})、耗时(平均420ms)。这种透明性,对定位“为什么答案为空”这类问题极其关键。

整个Web层就三个文件:index.html(含提问框、结果区、加载动画)、static/style.css(极简美化)、server.py(Flask后端,含/api/ask路由及完整错误处理)。没有Webpack,没有Babel,没有TypeScript——所有技术栈都在Python 3.6+标准库里。

3. 核心细节解析与实操要点:从CSV到Cypher,每一步都藏着经验

3.1 数据导入:data2neo4j.py不是脚本,是数据清洗流水线

很多同学以为data2neo4j.py就是读CSV、写Cypher。实际上,它承担了90%的数据治理工作。我们来看关键环节:

第一关:编码与空值清洗
电影数据常含GBK编码乱码、Excel导出的\xa0不间断空格、缺失值写成NULL或空字符串。data2neo4j.py开头就强制:

# 统一转UTF-8,删除首尾空格,NULL转None
df = pd.read_csv(file_path, encoding='utf-8', na_values=['NULL', ''], keep_default_na=False)
df = df.applymap(lambda x: x.strip() if isinstance(x, str) else x)

若跳过此步,person.csv里“张国荣”被读成“张国荣\xa0”,后续MATCH (p:Person) WHERE p.name = '张国荣'永远找不到节点。

第二关:ID标准化与类型强转
Neo4j要求节点ID必须是字符串或数字,但CSV里常混用。movie.csvid列若含字母(如”tt1234567”),必须转str;person_to_movie.csvperson_idmovie_id若为整数,需统一转str,否则关系无法关联。代码中:

# 强制转字符串,避免int与str比较失败
df_person_to_movie['person_id'] = df_person_to_movie['person_id'].astype(str)
df_person_to_movie['movie_id'] = df_person_to_movie['movie_id'].astype(str)

第三关:关系去重与方向校验
person_to_movie.csv可能含重复行(同一人演同一部电影多次记录),或错误角色(role列出现”producer”但本系统未定义该关系)。data2neo4j.py会:
- drop_duplicates()去重;
- query("role in ['actor','director','writer']")过滤非法role;
- 对role=='actor',生成(p:Person)-[:acted_in]->(m:Movie);对role=='director',生成(p:Person)-[:directed]->(m:Movie)

第四关:批量导入性能优化
直接for循环session.run(cypher)导入10万关系,速度感人。本包采用neo4j.Driver.execute_write配合UNWIND批量:

UNWIND $rows AS row
CREATE (p:Person {id: row.person_id, name: row.person_name})

配合batch_size=1000参数,导入速度提升7倍。实测:25万关系导入从22分钟降至3分15秒。

实操心得:首次运行data2neo4j.py前,务必确认Neo4j服务已启动且neo4j://localhost:7687可连。若报错ServiceUnavailable,不是代码问题,是Neo4j没开。Mac用户注意:Neo4j Desktop默认监听bolt://localhost:7687,而代码用neo4j://协议,需在Neo4j Browser设置里勾选“Allow non-encrypted connections”。

3.2 问句解析:process_question.py里的实体链接,比想象中难

意图识别只是第一步,真正的难点是“实体链接”(Entity Linking):把问句中的“周星驰”精准映射到Neo4j中(:Person {name: "周星驰"})节点,而非同音字“周星星”或“周润发”。

本包采用三级链接策略:

一级:精确字符串匹配
对问句分词结果,遍历person.csvname列,找完全相等的项。快,但无法处理“星爷”“发哥”等昵称。

二级:编辑距离+别名库
process_question.py加载data/alias_dict.json(含{“周星驰”: [“星爷”, “周先生”], “刘德华”: [“华仔”]}),计算问句词与别名的Levenshtein距离,阈值设为1。例如问句含“星爷”,匹配到“周星驰”的别名,即确认实体。

三级:上下文角色消歧
当问句含多个疑似人名时(如“张国荣和梁朝伟演过什么电影”),需判断谁是主语。本包利用question_classification.py输出的意图标签:若为acted_in_query,则两个名字都是actor;若为directed_query,则第一个名字更可能是director。通过分析Cypher模板中WHERE子句的变量位置实现。

注意:userdict3.txt必须放在jieba默认词典路径,否则“周星驰”会被切成“周/星驰”。代码中显式指定:

jieba.load_userdict("userdict3.txt")  # 强制加载,不依赖环境变量

3.3 Cypher生成:模板化不是偷懒,是可控性的保障

有人质疑“用模板生成Cypher太死板”。但在教学场景,模板化恰恰是优势:

  • 可审计性:所有Cypher都来自question_template.py的固定模板,如directed_template = "MATCH (p:Person)-[:directed]->(m:Movie) WHERE p.name = '{person}' RETURN m.title"。学生能一眼看出“导演查询”对应哪段代码,修改逻辑只需改模板字符串。
  • 防注入:模板中{person}用Python .format()填充,但填充前已做过严格校验(只允许中文、英文、数字、空格),杜绝Cypher注入攻击。
  • 易扩展:新增意图“评分查询”,只需在question_template.py加一行rating_template = "MATCH (m:Movie) WHERE m.title = '{movie}' RETURN m.rating",并在process_question.pygenerate_cypher函数里加分支。

模板不是终点,而是起点。当你需要支持“周星驰导演且评分>8.5的电影”,就在模板里加AND m.rating > 8.5,参数从单个{person}变为{person}, {min_rating}。本包所有模板均预留扩展位,question_template.py里注释明确标出“此处可加WHERE条件”。

4. 实操过程与核心环节实现:从解压到提问,手把手跑通全流程

4.1 环境准备:Python 3.6是底线,不是建议

本包锁定Python 3.6,原因残酷而真实:
- Neo4j Python Driver 4.x要求Python ≥3.6;
- TextCNN模型用PyTorch 1.4,其Windows版仅支持Python 3.6/3.7;
- requirements.txtjieba==0.39在Python 3.8+需额外编译,学生常卡在此步。

正确操作流程(Windows/Mac通用):
1. 下载并安装Python 3.6.8(官网archive版,勿用最新3.12);
2. 创建虚拟环境:python -m venv kg_qa_env
3. 激活环境:Windows用kg_qa_env\Scripts\activate.bat,Mac用source kg_qa_env/bin/activate
4. 升级pip:python -m pip install --upgrade pip
5. 安装依赖:pip install -r requirements.txt(全程离线,无网络请求)。

警告:若用Anaconda,务必创建Python 3.6环境:conda create -n kg_qa python=3.6。Conda默认装最新Python,会破坏依赖兼容性。

4.2 Neo4j配置:三步启动,拒绝“配置黑洞”

Neo4j Desktop是唯一推荐方式(非Server版),因其自带Browser可视化界面:

  1. 下载Neo4j Desktop(官网),安装后启动;
  2. 点击“Add Graph” → “Local DBMS” → 输入密码(如password123),记住此密码;
  3. 启动图数据库,点击“Manage” → “Open Console”,在Browser中执行RETURN "Hello"验证连通。

此时,server.py中数据库配置需同步:

URI = "neo4j://localhost:7687"
AUTH = ("neo4j", "password123")  # 此处密码必须与上步一致

提示:若启动后访问http://localhost:7474显示“Connection refused”,检查Neo4j Desktop左侧面板,确保图数据库状态为绿色“Running”,而非灰色“Stopped”。

4.3 数据导入:data2neo4j.py执行细节与预期输出

进入项目根目录,激活虚拟环境后执行:

python data2neo4j.py --uri neo4j://localhost:7687 --user neo4j --password password123

你会看到如下输出(关键信息已加粗):

[INFO] 开始导入 movie.csv... 共8231条  
[INFO] 创建Movie节点索引 ON :Movie(id)  
[INFO] 导入完成,耗时 124.3s  
[INFO] 开始导入 person.csv... 共12456条  
[INFO] 创建Person节点索引 ON :Person(id)  
[INFO] 导入完成,耗时 187.6s  
[INFO] 开始导入 person_to_movie.csv... 共248912条  
[INFO] 批量创建acted_in关系,batch_size=1000  
[INFO] 关系导入完成,耗时 198.2s  
[SUCCESS] 全量导入成功!总节点数: 20712, 总关系数: 248912

验证是否成功:
- 打开Neo4j Browser,执行MATCH (n) RETURN count(n),应返回20712
- 执行MATCH ()-[r]->() RETURN count(r),应返回248912
- 执行MATCH (p:Person {name: "周星驰"}) RETURN p,应返回一个节点。

若某步报错,90%概率是CSV路径错误或ID类型不匹配。检查data2neo4j.pyDATA_DIR = "data/"是否指向正确的data文件夹。

4.4 启动问答服务:server.py的静默模式与调试开关

启动服务只需一条命令:

python server.py

默认启动在http://localhost:5000,但这是静默模式——无日志输出。若需调试,加--debug参数:

python server.py --debug

此时,每次提问都会在终端打印完整链路:

[DEBUG] 收到问题: "王家卫导演过哪些爱情片"  
[DEBUG] 分词结果: ['王家卫', '导演', '过', '哪些', '爱情', '片']  
[DEBUG] 意图识别: directed_genre_query (置信度 0.96)  
[DEBUG] 实体链接: person='王家卫' → node_id='p1024'  
[DEBUG] 生成Cypher: MATCH (p:Person)-[:directed]->(m:Movie)-[:belongs_to]->(g:Genre) WHERE p.name = '王家卫' AND g.name = '爱情' RETURN m.title  
[DEBUG] 查询结果: ['重庆森林', '花样年华', '繁花']  
[DEBUG] 响应耗时: 412ms

前端交互:
- 双击打开index.html(无需服务器);
- 在输入框输入问题,如“阿甘正传的导演是谁”,点击“提问”;
- 结果区显示:“阿甘正传的导演是罗伯特·泽米吉斯”,下方小字显示Cypher: MATCH (m:Movie {title: "阿甘正传"})-[:directed]->(p:Person) RETURN p.name

注意:index.html是纯静态文件,所有请求发往localhost:5000/api/ask。若你在其他端口启动Flask(如--port 8000),需手动修改index.htmlconst API_URL = "http://localhost:5000/api/ask";为对应地址。

5. 常见问题与排查技巧实录:那些让毕设延期三天的“小问题”

5.1 问题速查表:按现象归类,直击根源

现象最可能原因快速验证方法解决方案
data2neo4j.py报错KeyError: 'name'CSV列名不匹配(如person.csv里是full_name而非namehead -n 1 data/person.csv 查看首行标题修改data2neo4j.pydf_person['name']为实际列名,或重命名CSV列
Flask启动后,前端提问返回500 Internal Server ErrorNeo4j连接失败或Cypher语法错误终端运行python server.py --debug,看报错详情若报ServiceUnavailable,检查Neo4j是否运行;若报SyntaxError,复制报错Cypher到Browser中执行调试
提问“周星驰演过哪些电影”返回空列表实体链接失败(“周星驰”未匹配到Person节点)在Neo4j Browser执行MATCH (p:Person) WHERE p.name CONTAINS '周星驰' RETURN p检查person.csv中“周星驰”是否拼写一致;确认userdict3.txt已加载;检查process_question.py中别名库路径
question_classification.py报错ModuleNotFoundError: No module named 'torch'PyTorch未安装或版本不匹配python -c "import torch; print(torch.__version__)"重新执行pip install torch==1.4.0+cpu -f https://download.pytorch.org/whl/torch_stable.html(CPU版)
前端显示“Loading…”后无响应index.html跨域或API地址错误浏览器F12 → Network → 看/api/ask请求状态检查index.htmlAPI_URL是否为http://localhost:5000/api/ask;确认Flask服务正在运行

5.2 独家避坑技巧:来自六届毕设的血泪总结

技巧1:CSV导入前,先用Excel“文本导入向导”检查编码
很多同学直接双击CSV用Excel打开,再另存为UTF-8,结果Excel偷偷加了BOM头(),导致Python读取时报UnicodeDecodeError。正确做法:用VS Code打开CSV,右下角看编码(应为UTF-8),若显示GBK,点击编码名→“Reopen with Encoding”→选UTF-8→保存。

技巧2:调试Cypher,永远用EXPLAIN代替PROFILE
PROFILE会真实执行查询,耗时长且可能锁表;EXPLAIN只分析执行计划,秒出结果。在Browser中写完Cypher,先点“Explain”按钮,看是否用了索引(NodeIndexSeek)、是否扫描全表(AllNodesScan)。若出现后者,说明缺少索引,立即执行CREATE INDEX ON :Movie(title)

技巧3:问句测试,用test.py而非反复刷新前端
test.py是专为调试设计的脚本:

from process_question import answer_question
print(answer_question("梁朝伟合作最多的演员是谁"))

运行python test.py,终端直接输出答案和Cypher,免去前端交互干扰,定位问题快3倍。

技巧4:毕设答辩演示,提前录制“故障恢复”视频
答辩时网络波动、Neo4j崩溃是常态。建议提前录一段视频:演示data2neo4j.py重跑、server.py重启、前端刷新全过程,时长<60秒。当现场出问题时,播放此视频,既专业又体现工程素养。

技巧5:扩展新意图,三步法保成功
想支持“电影票房查询”?按此流程:
1. 在questions/train.txt中添加10条标注样本,格式票房多少\t阿甘正传
2. 修改question_classification.pyLABELS列表,增加"box_office"
3. 在question_template.py中加模板box_office_template = "MATCH (m:Movie) WHERE m.title = '{movie}' RETURN m.box_office"
4. 重新训练模型(python train_classifier.py),5分钟搞定。

最后分享一个小技巧:本包所有日志都打到logs/目录,server.log记录每次提问的完整链路。答辩前夜,删掉旧日志,跑一遍所有测试问句,然后把server.log打印出来——这是你最硬核的“系统稳定运行证明”。

6. 个人实操体会:为什么这个包能帮你省下至少两周时间

我第一次带知识图谱毕设是在2019年,当时让学生自己搭环境:从下载Neo4j、配置Java环境变量、学习Cypher语法、爬豆瓣电影数据、清洗CSV、写导入脚本、调jieba分词、标问句数据、训TextCNN、搭Flask、写前端……一个学生花了23天,才跑通第一条“导演是谁”的查询。期间他重装了4次系统,因为Java版本冲突、Neo4j端口被占用、jieba词典路径错误等问题反复出现。

这个实战包,就是把那23天里所有“非智力劳动”全部封装掉的结果。它不承诺教会你图神经网络,但它保证:
- 第1天下午,你能看到Neo4j Browser里出现“周星驰”节点;
- 第2天上午,data2neo4j.py成功导入全部数据;
- 第2天下午,python test.py输出“阿甘正传的导演是罗伯特·泽米吉斯”;
- 第3天,index.html在浏览器里正常提问并返回答案;
- 第4天,你开始修改question_template.py,加入自己的业务逻辑;
- 第5天,你写完毕设报告的“系统实现”章节,附上5张Browser截图和3张前端交互图。

它存在的意义,不是替代你的思考,而是把思考聚焦在真正有价值的地方:如何设计更合理的实体关系?怎样优化Cypher让查询更快?如果用户问“周星驰和吴孟达合作过几次”,现有模板能否支持?这些才是知识图谱问答的核心挑战,而不是卡在“为什么jieba不识别周星驰”。

所以,别把它当一个下载即用的玩具。把它当作一把已经磨好的刀——刀刃锋利,握柄舒适,你只需决定砍向哪块木头。电影领域只是示例,把movie.csv换成你的电商商品表,把person.csv换成供应商表,把acted_in关系换成supplies,这套流程依然成立。知识图谱的本质,从来不是技术堆砌,而是用图的思维,重新组织你手头的数据。现在,刀给你了,木头,就在你桌上。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:一套开箱即用的电影领域问答系统,底层用Neo4j构建包含电影、人物、类型三类实体及关联关系的知识图谱。提供完整原始数据:movie.csv、person.csv、genre.csv等实体表,以及person_to_movie.csv、movie_to_genre.csv等关系表,支持一键导入图数据库。代码模块分工明确——data2neo4j.py完成数据清洗与入库;process_question.py和question_classification.py负责中文问句分词、意图识别与槽位抽取;server.py和client.py搭建轻量HTTP服务,配合index.html实现浏览器端自然语言提问;配套有自定义词典userdict3.txt、分词词表vocabulary.txt、分类标签label.txt等NLP基础资源。项目含详细设计报告(Word)、Markdown说明文档、多张运行界面截图,requirements.txt已锁定Python 3.6兼容依赖。无需额外配置,解压后按文档执行几条命令即可启动服务,支持如‘王家卫导演过哪些爱情片’‘梁朝伟合作最多的演员是谁’等多样化查询,答案从图谱中路径匹配生成,结构清晰可读。适合高校课程设计、毕设落地或知识图谱+问答技术入门实操。


本文还有配套的精品资源,点击获取
menu-r.4af5f7ec.gif

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值