红楼梦关系问答系统java使用neo4j开法

文章介绍了使用Python和Neo4j数据库构建了一个基于自然语言处理的红楼梦人物关系问答系统,通过分词和Cypher查询来获取角色间的关系信息,如丫鬟、妾等。
摘要由CSDN通过智能技术生成

title: 红楼梦人物关系问答系统
date: 2023-10-14 13:35:49
categories:

  • neo4j
    tags:

修改后的代码

# -*- coding: utf-8 -*-

#########add 关系#############

from py2neo import Graph

import jieba

import jieba.posseg as pseg



# 创建Neo4j连接

graph = Graph("bolt://localhost:7687", auth=("neo4j", "123456"))



# 初始化jieba分词

jieba.initialize()



# 解析问题和执行查询的逻辑

def answer_question(question):

    # 使用jieba进行分词 $character_name

    words = jieba.cut(question)

    wordsa=words

    wordsb=jieba.cut(question)

    #print(words)

    question_keywordsa = [word for word in wordsa if len(word) > 0]

    question_keywords = [word for word in wordsb if len(word) > 1]  # 过滤掉单个字符的词语

    print(question_keywordsa)

    print(question_keywords)

    character_name=question_keywordsa[0]

    print(question_keywordsa[0])

    print(question_keywordsa[-1])

    # 找出词性为"nr"(人名)的词语

    #names = []

    #for word, pos in words:

    #    if pos == 'nr':

    #        names.append(word)

    #print(names)

    #

    #guanxi=0

    #character_name1=question_keywords[0]

    #character_name2=question_keywords[1]

    if "关系" in question_keywordsa:

        

        #

        character_name1=question_keywords[0]

        character_name2=question_keywords[1]

        cypher_query ="MATCH (c1:Character)-[r:RELATION]->(c2:Character) WHERE c1.name = '"+ character_name1+ "' and c2.name='"+character_name2+"' RETURN r.type"





    elif "丫鬟" in question_keywordsa:

        

        #

        cypher_query ="MATCH (c1:Character)-[:RELATION {type: '丫鬟'}]->(c2:Character) WHERE c1.name = '"+ character_name+"' RETURN c2.name"



    elif "妾" in question_keywordsa:

        

        #

        cypher_query ="MATCH (c1:Character)-[:RELATION {type: '妾'}]->(c2:Character) WHERE c1.name = '"+ character_name+"' RETURN c2.name"



    else:

        return "抱歉,我不知道如何回答这个问题。"



    answer=""

    result = graph.run(cypher_query)

    if "关系" in question_keywordsa:

        answer = [record["r.type"] for record in result]

    else:

        answer = [record["c2.name"] for record in result]



    if answer:

        return ", ".join(answer)

    else:

        return "未找到相关信息。"

   

import keyboard



def main():

    print("Press 'Esc' to exit.")

    

    while True:

        try:

            user_question = input("请输入您的问题:")

            answer = answer_question(user_question)

            print("答案:" + str(answer))

            

            # 询问用户是否继续

            continue_option = input("继续提问吗?(1继续,0退出): ")

            if continue_option == '0':

                print("Exiting the program.")

                break

        except KeyboardInterrupt:

            print("Exiting the program.")

            break



if __name__ == "__main__":

    main()













# 用户输入问题

#user_question = input("请输入您的问题:")

# 回答问题

#answer = answer_question(user_question)

#print(f"答案:{answer}")

运行

(test) hadoop@ubuntu:~/Pictures/neo4jsyDSJ21a/hongloumenDSJ21a/hongloum2a$ python hlmgx5.py
Building prefix dict from the default dictionary ...
Loading model from cache /tmp/jieba.cache
Loading model cost 0.437 seconds.
Prefix dict has been built successfully.
Press 'Esc' to exit.
请输入您的问题:贾宝玉的妾
['贾宝玉', '的', '妾']
['贾宝玉']
贾宝玉
妾
答案:袭人
继续提问吗?(1继续,0退出): 1
请输入您的问题:贾宝玉的丫鬟
['贾宝玉', '的', '丫鬟']
['贾宝玉', '丫鬟']
贾宝玉
丫鬟
答案:何春燕
继续提问吗?(1继续,0退出): 1
请输入您的问题:贾宝玉与何春燕的关系
['贾宝玉', '与', '何春燕', '的', '关系']
['贾宝玉', '何春燕', '关系']
贾宝玉
关系
答案:丫鬟
继续提问吗?(1继续,0退出): 1
请输入您的问题:林黛玉与贾宝玉的关系
['林黛玉', '与', '贾宝玉', '的', '关系']
['林黛玉', '贾宝玉', '关系']
林黛玉
关系
答案:表妹
继续提问吗?(1继续,0退出): 1
请输入您的问题:贾宝玉的丫鬟
['贾宝玉', '的', '丫鬟']
['贾宝玉', '丫鬟']
贾宝玉
丫鬟
答案:何春燕
继续提问吗?(1继续,0退出): 0
Exiting the program.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elik-hb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值