使用这个聊天机器人教程(https://apps.worldwritable.com/tutorials/chatbot/),我被困在第一个基地......这可能是一个非常初学的错误,抱歉。
所以我把这段代码放在Ipython中:
import numpy as np
phrase = ["hello"]
np_phrase = np.array(phrase)
check_for_greeting(np_phrase)
然后用:
来调用它'this "kind" of string'
还尝试了不同类型但总是相同的答案:'x'对象没有属性'words'
'words'是一种方法吗?它是如何工作的?
我非常感谢你,我一直在寻找答案,我保证。
答案 0 :(得分:4)
你错过了教程中至关重要的内容:
parsed = TextBlob(cleaned)
然后将该对象传递给check_for_greeting()
函数:
resp = check_for_greeting(parsed)
TextBlob
的实例有words
attribute。该教程实际上教你关于该对象,链接到project documentation:
使用NLP的Python程序员有两个很棒的高级库可供选择:
TextBlob
和spaCy
。spaCy
易于使用且速度快,但它可能是内存密集型的,并不会尝试覆盖整个统计NLP。TextBlob
将庞大的NLTK库包装在一个非常平易近人的API中,所以尽管速度较慢,但它非常全面。我将在这里使用TextBlob
,但请参阅我的文章生成文章以获取使用spaCy的示例。
如果您想在本地使用相同的代码,您也必须使用TextBlob
,或调整功能以将sentence
视为序列单词(删除.words
属性)。
答案 1 :(得分: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)
我希望这有帮助。