Python 如何从字符串中提取值并在数据库查询中使用这些值?

Python 如何从字符串中提取值并在数据库查询中使用这些值?,python,chatbot,stemming,ner,Python,Chatbot,Stemming,Ner,我试图从一个句子/问题中提取自定义实体,并根据数据库查询它们,问题是我在提取实体时遇到了问题 我的表有100000行,如下所示: Car type | Owner ------------------ Sedan | John Hatchback| Mary 我希望该计划回答一个示例问题: “这辆轿车是谁买的?” 理想情况下,这里的正确答案应该是John 我是否有可能让程序理解以下句子背后的上下文并正确回答 这意味着发动机应: 理解句子“谁购买了轿车”中的“轿车”是一个实体(车型),并将

我试图从一个句子/问题中提取自定义实体,并根据数据库查询它们,问题是我在提取实体时遇到了问题

我的表有100000行,如下所示:

Car type | Owner
------------------
Sedan    | John
Hatchback| Mary
我希望该计划回答一个示例问题:

“这辆轿车是谁买的?”

理想情况下,这里的正确答案应该是
John

我是否有可能让程序理解以下句子背后的上下文并正确回答

这意味着发动机应:

  • 理解句子“谁购买了轿车”中的“轿车”是一个实体(车型),并将其翻译为
    car type=sedan

  • 理解句子中的“购买”一词与“所有者”的含义相同

  • 让我们假设所有者与购买它的人相同,没有租赁或类似的东西


    最终目标是理解这句话中的实体,并将其转换为SQL查询。

    您要查找的是所谓的,它代表自然语言(处理)工具包

    为了让您了解这个库可以做什么,下面是NLTK主页上的演示代码,演示如何标记和标记文本:

    import nltk
    sentence = "At eight o'clock on Thursday morning Arthur didn't feel very good."
    tokens = nltk.word_tokenize(sentence)
    print(tokens)
    tagged = nltk.pos_tag(tokens)
    print(tagged[0:6])
    
    预期产出:

    ['At', 'eight', "o'clock", 'on', 'Thursday', 'morning', 'Arthur', 'did', "n't", 'feel', 'very', 'good', '.']
    [('At', 'IN'), ('eight', 'CD'), ("o'clock", 'JJ'), ('on', 'IN'), ('Thursday', 'NNP'), ('morning', 'NN')]
    
    现在,考虑到您的需求是多么简单,您甚至不需要像NLTK这样复杂的库来解决您的问题,您可以使用一个简单的预定义字符串搜索insead

    例如,如果您只需要回答以下几个问题:

    “谁拥有[x]型汽车?”

    “有多少人拥有[x]型汽车?”

    “[x]拥有哪种类型的汽车?”

    您可以使用正则表达式查找预定问题的匹配项:

    import re
    
    # get the question
    question = "What kind of car does Joe own?"
    
    # use regex to find matches for predefined question formats
    car_type_for_match = re.findall(r"What type of car does (.*?) own\?", question)
    
    if car_type_for_match and len(car_type_for_match) > 0:
      print("Car type for: {}".format(car_type_for_match))
    
    稍后,您可以使用更多的
    if
    语句展开,以添加更多问题


    祝你好运。

    使用映射来映射sedan:“car type”和Purchased:“Owner”等词,然后解析句子并替换为这些匹配的词sounds,如配对t检验,前提是你已经收集了数据。如果您尚未收集数据,则必须收集车型和车主列表,以及表示拥有/购买车辆的词语,并根据“拥有”列表对车型和车主进行配对t检验@min2bro我也是这么想的,但是要把所有这些类似的词都和“Owned”区分开来不是有点困难吗?如果用户问“谁买了这辆轿车?”这个问题,理想情况下,发动机应该识别Bunded=owner,但不会,因为单词“Bunded”没有映射到“owner”。您在这里问的是一个更深层次的问题,我可以建议你使用一些词向量算法来解决这个问题,你可以训练和映射这些算法,以找到这些词的上下文含义,这些词是与所有者相关的同义词,如购买、购买等。这是一个更难的方法,尽管你需要找到已经受过训练的模型。