Python 如何从字符串中提取值并在数据库查询中使用这些值?
我试图从一个句子/问题中提取自定义实体,并根据数据库查询它们,问题是我在提取实体时遇到了问题 我的表有100000行,如下所示:Python 如何从字符串中提取值并在数据库查询中使用这些值?,python,chatbot,stemming,ner,Python,Chatbot,Stemming,Ner,我试图从一个句子/问题中提取自定义实体,并根据数据库查询它们,问题是我在提取实体时遇到了问题 我的表有100000行,如下所示: Car type | Owner ------------------ Sedan | John Hatchback| Mary 我希望该计划回答一个示例问题: “这辆轿车是谁买的?” 理想情况下,这里的正确答案应该是John 我是否有可能让程序理解以下句子背后的上下文并正确回答 这意味着发动机应: 理解句子“谁购买了轿车”中的“轿车”是一个实体(车型),并将
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”。您在这里问的是一个更深层次的问题,我可以建议你使用一些词向量算法来解决这个问题,你可以训练和映射这些算法,以找到这些词的上下文含义,这些词是与所有者相关的同义词,如购买、购买等。这是一个更难的方法,尽管你需要找到已经受过训练的模型。