Monday, July 27, 2009

If you have a Google Wave account, then try my Robot extension

I wrote a Robot extension that reads text on a wave (and any child blips added to it), and adds its own child blips with some NLP analysis (entity extraction and auto-tagging). No big deal, but fun to write.

Give it a try: knowledge-books@appspot.com

11 comments:

mb said...

Mark, I added your bot to my wave, and it's going berserk. It's created 50+ blips on my wave, and they're all empty:

knowledge-books@appspot.com:
blip submitted events: root blip: title: text:
results: NLP Analysis:
Summary:
...
Auto tags: []
Names: []
Places: []
Companies: []
Products: []

mb said...

Mark, I tried the NLP demo on http://knowledge-books.appspot.com

For some reason it thinks every text block refers to computers and AI.

Here's a paragraph from the Kama Sutra -- for some reason it's getting tagged with "computers", "ai_nlp" and "c++"

-----

Those who believe that destiny is the prime mover of all things say: We should not exert ourselves to acquire wealth, for sometimes it is not acquired although we strive to get it, while at other times it comes to us of itself without any exertion on our part. Everything is therefore in the power of destiny, who is the lord of gain and loss, of success and defeat, of pleasure and pain. Thus we see that Bali 3 was raised to the throne of Indra by destiny, and was also put down by the same power, and it is destiny only that call reinstate him.

Auto tags: [computers:1.0, religion:0.3575419, computers_ai_textmining:0.3575419, religion_christianity:0.31284916, religion_islam:0.25139666, computers_ai_nlp:0.21787709, computers_programming_c++:0.2122905

Mark Watson, author and consultant said...

Hello MB, thanks for giving it a try.

I had to use a very small in-memory linguistic database in order to meet memory limits (and response limits) of the Java AppEngine. Both the robot and the demo form use this tiny database. I really need to convert from an in-memory store (actually, a few hundred megabytes is all I need - that is why I use in-memory data structures) to use persistent storage and JDO. So, the results are bad for now.

re: getting 50 blips - I have not seen that, but I am looking at the problem right now. My intention was for one robot blip to be created for each original wave, and then for each non-robot added blip (this is where the problem is).

Anyway, I am very excited by the possibilities of Wave, but I am still going through a learning curve.

Best regards,
Mark

Mark Watson, author and consultant said...

Hello MB,

Please give it another try. I modified:

1. still using a tiny linguistic database, but I found and fixed a bug in the code that created the tiny database.

2. I now no longer have the robot reply to empty waves (this was the issue of you getting 50 replies to your empty wave)

3. I now no longer have the robot reply to blips added to an original wave.

-Mark

mb said...

Tried it again, but now there are no replies from your bot.

Mark Watson, author and consultant said...

Hello MB,

That is correct: I just looked at my AppEngine logs: it looks like you created a blank wave so the robot did not respond to it. If you create a new wave, add some text to it, click done, then when asked to invite participants add my robot, it should work fine.

-Mark

mb said...

Sorry, Mark, it's not working.

I replied to your bot on an existing wave, and there was no response.

Then created a new wave, added your bot, got the "I'm alive" blip, replied to that blip, and got nothing back.

mb said...

Update -- I added more blips to the wave shared with your bot, and got no responses.

Then when I edited the root wave, I got 20+ blips from your bot.

Mark Watson, author and consultant said...

Hello Mahlon,

I just created a Wave and invited you to participate so we can discuss this a little more interactively. From my logs, it looks like you access my robot about once a second; are you trying my robot from a robot of your own? Anyway, please accept my Wave invite.

I disabled creating replies to blips, BTW. My intention, at least for now, is for my robot to only reply when it is added to a newly created wave.

Thanks,
Mark

Thanks,
Mark

Mark Watson, author and consultant said...

Hello again Mahlon,

I discovered the problem: my bug, or rather my misunderstanding.

I had enabled the capability:

capability name="document_changed" content="true"


So if my robot was added to a blib, then text added, then my robot responded for just about every keypress while editing the blip/wave.

I am now changing it to ony respond later the document is created and the user clicks "Done".

Thanks,
Mark

Mark Watson, author and consultant said...

Mahlon, I just tested with the "document_changed" capability removed - now the robot is behaving the way I want it to :-)

When I tested, I created a Wave, clicked "Done", then added my robot -- that is why I did not see this problem.

Thanks again for your help,
Mark