2017-06-21 109 views
2

在这个chatbot教程(https://apps.worldwritable.com/tutorials/chatbot/)上工作,我被困在第一个基地......这可能是一个非常初学者的错误,对不起。'言'是一种方法吗?

所以我把这个代码在IPython中:


import numpy as np 
phrase = ["hello"] 
np_phrase = np.array(phrase) 
check_for_greeting(np_phrase) 

不同也试过:


GREETING_KEYWORDS = ("hello", "hi", "greetings", "sup", "what's up",) 

GREETING_RESPONSES = ["'sup bro", "hey", "nods", "hey you get my snap?"] 

def check_for_greeting(sentence): 
     for word in sentence.words: 
      if word.lower() in GREETING_KEYWORDS: 
        return random.choice(GREETING_RESPONSES) 

然后用它打电话类型,但总是相同的答案:'x'对象没有属性的'单词'

'单词'是一种方法吗?它是如何工作的?

非常感谢您的提前,我承诺,我一直在寻找答案很久。

+1

我认为你只是指'在句子中的词'。这可能只是教程中的一个错字? – smarx

+0

不,不会调用“单词”,所以它不是一种方法。这仅仅是一个属性。你正在传递一个没有这个属性的对象'句子'。 –

+0

噢,实际上,在教程中可能不是一个错字......他们传递了不同的东西('TextBlob')。 – smarx

回答

0

通常当你遍历一个列表,或者在这种情况下,一个numpy.ndarray,你会解决它如何定义它。

在这种情况下,您设置了句子,然后循环单词。这在这个例子中不起作用,即我们无法看到该聊天机器人的所有代码。

如果我在下面做,它会打印'找到它',但它不会打印一个随机响应,我怀疑random.choice是脚本中我看不到的某个函数。

def check_for_greeting(sentence): 
print type(sentence) 
for word in sentence: 
    if word.lower() in GREETING_KEYWORDS: 
     print "Found it" 
     return random.choice(GREETING_RESPONSES) 

我希望能够对此有所帮助。

+0

这很有帮助。谢谢 –

4

你错过了一些教程至关重要:

parsed = TextBlob(cleaned) 

然后将该对象传递给check_for_greeting()功能:

resp = check_for_greeting(parsed) 

它是具有words attributeTextBlob实例。本教程其实教你有关的对象,链接到project documentation

Python程序员用NLP的工作人员有两大高层库可供选择:TextBlobspaCyspaCy易于使用且速度很快,但它可能会占用大量内存,并且不会涵盖整个统计NLP。 TextBlob将庞大的NLTK库封装在一个非常平易近人的API中,所以虽然速度较慢,但​​它非常全面。我将在这里使用TextBlob,但请参阅我的关于使用spaCy的示例的文本生成文章。

如果你想在本地使用相同的代码,你要么必须使用TextBlob调节功能来治疗sentence为字(除去.words属性)的序列。

+0

非常感谢你的时间!我将深入TextBlob。 '迫不及待地追求。 –

+0

很高兴能有帮助!请注意,您可以只标记* 1个答案,而不是两个。哪一个完全取决于你;选择一个你最感兴趣的人,或者选择你认为适用的任何标准。不挑选也是一个有效的选择。 –

相关问题