Slashdot Log In
Can You Create An Intelligent Haiku Generator?
Posted by
timothy
on Wed Jun 14, 2000 02:17 AM
from the must-refer-to-season dept.
from the must-refer-to-season dept.
BlueCalx- writes: "dotcomma has created a new programming contest: this time, to determine whether or not someone can create a program that can automatically parse an RDF file and generate a haiku based on its headlines or stories. Slashdot users such as 575 have essentially been doing the same thing for months: now, it's time to see if a computer program can do the same thing *g*. After witnessing the success of the AI Bots challenge a few months ago, it'll be interesting to see if a program like this is possible." Anyone who can generate intelligible, germane haiku from headlines without human intervention has my respect -- it's a lot thornier than it sounds.
This discussion has been archived.
No new comments can be posted.
Can You Create An Intelligent Haiku Generator?
|
Log In/Create an Account
| Top
| 211 comments
(Spill at 50!) | Index Only
| Search Discussion
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
Perl does haiku... (Score:3)
There is a Perl module written by Damian Conway called Coy which performs error handling in haiku. It has an extensible grammer...
The Problem with coy (Score:3)
not consider the line as a barrier between
parts of the haiku that mean something. That is,
each line in a good haiku should ideally be a
valid sentence, or failing that, each line in an
ok haiku should at least be a seperate clause.
Perl Haiku Contest (Score:3)
-Yenya
--
Addidtional requirement?? (Score:3)
Now for tiebreakers, they should have the additional requirement that your coding statements are in Haiku form.
Embeded Haiku,
Hidden within the sourcecode.
It should break the tie.
And now for a Meta-Haiku:
Multisyllabic,
Using five, seven, and five
A haiku is formed.
A wealthy eccentric who marches to the beat of a different drum. But you may call me "Noodle Noggin."
Difficult (Score:3)
Syllables of English words
Algorithmically
It's even harder
To get correct grammar, from
Arbitrary words
Re:Most of these aren't haikus. (Score:3)
Children studying
The forums are congested
With cries of "Me Too"
The Real Challenge (Score:3)
A forgotten rule for classic Japanese Haiku, in addition to the usual 5-7-5 syllable rule, is that the Haiku must contain at least one reference to a season.
For example:
Under the blue sky
I take a dip in the pool
To wash off my sweat
Hopefully, my reference to summer is obvious enough ... I admit freely, I'm no Basho
I challenge any of the serious contenders for this Haiku contest to write their code taking into consideration this 'seasonal reference' rule.
I would be interested in seeing the Haiku generated by such a code ... especially since Cyberspace is rather devoid of seasons ... much like most of California (hmmm, coincidence?)
Re:Haiku (Score:3)
He is quaint but cumbersome...
DOS batch file perhaps?
creating something really intelligent takes time (Score:3)
You could just use a random generator that matches the words, but that program doesn't have a clue about the content, what it's saying.
When you want to know what's some text about, you have to feed it all words of the dictionary and give extra information for each word. Creating sentences is even more difficult as there are linguistic rules, and they must sound normal to a native speaker (although haikus may be more simple).
The company I work for (DMP - http://www.dmpartners.be [dmpartners.be]) is busy in this field.
One of our applications is able to create a summary of a text.
The sentences of the summary aren't created, but are those sentences that represent the content of the text most. Feed it a txt/doc file, say how many lines/words you want and you'll have your summary instantly. Sounds simple but it is impressive when you use it.
What's behind it is even more impressive. Every word and sentence is analysed (what is subject, verb, adjective, ...) and using a dictionary of weighted words we know what word is more important and what not.
There's a lot of manual work involved, feeding the databases. One of the databases consists of words with the relations to other words. So if a words has synonyms, homonyms, is stronger, is the contrary, ... all these relations are marked in it. Without this you can't start to analyse the content of a text. When a word has more than one meaning/usage you also have to look at the context of the sentence and figure out the correct meaning.
It's a very interesting technology. The strenght is when you combine applications. Throw a multilingual search engine in it. So you type your question, it gets analysed (what exactly do you want, not just a keyword search), looks into the files in multiple languages, returns you the hits, and translates and summarised the results you want to see. Nice.
Haiku (Score:4)
The art of haiku
Rests not in strict meter, but
In the final line.
...the above being a perfect example of a VERY bad haiku.
Making an observation in a 575 triplet is simple. What makes a haiku stand out is the twist given to the final line. Consider it an Eastern version of the hoary joke format:
Three people are in a situation. The first one does something interesting. The second one does essentially the same thing. The third one says or does something surprising enough to qualify as funny.
The haiku works the same way: setup, setup, punchline. Not necessarily in the comic sense -- some good haiku are funny, but others are sharp, witty, insightful, probing, and so forth.
But no really excellent haiku is just taking input information and spitting out a formatted version of same. What makes a quality haiku is the same quality of thought that makes a good joke, the sideways-thinking free-association that no algorithm can even approach.
--
Seasonal Reference (Score:4)
"Me too"s and much spam
Dominate mighty Usenet
It must be Autumn...
dylan_-
--
Re: "Eliza Effect" (Score:4)
It's not as damaging to the Turing test as one would think. Turing unknowingly rules out the Eliza Effect when he specified that the test should be done as a comparison, not just asking someone "do you think you're talking to a human or a computer", which people would answer "human" very easily.
It might also have something to do with the predictability of people. Eliza only reacts appropriately when you play her game. Ask about something not related to your psychological problems, and it collapses.
Example:
It's like this (Score:4)
Poem rhythm is down pat,
But it lacks a soul.
(not to mention that true haiku requires a seasonal reference, but I doubt that's a condition of this contest...)
Haiku Code (in C) (Score:4)
int haiku(char x)
{ x = x + 16;
if(1) return x; }
Not very useful, but... Oh, you mean they wanted a compter program that generates haiku! Darn.
Haiku (Score:4)
There can be no contesting...
Haikus on-topic!
Five Seven Five grins
His knuckles crack, his eyes gleam
Code to be written
Re:Haiku (Score:4)
Posting two haiku at once
Forgets to split them
Genhaiku. (Score:5)
Who wrote generator of haiku.
But an error he made,
And the program instead
Generates bad limericks. Gosh, how come?
Rorshack Text != Intelligent (Score:5)
The Haiku, being a very minimalist form, allows the brain of the reader to fill in so many gaps in the sense of the language that there is room to create entire meaning where none is intended.
Thus, as with Elisa, the cleverness of haiku generators lies less in the programming, and more in the linguistic observation regarding the nature of the text produced.
Not, of course, to say that writing haiku generators isn't fun and worthwhile. But's let's not call them intelligent, because firstly they aren't, and secondly we should marvel more at humans' ability to synthesise meaning and pattern and less at computers' ability to imitate it.
Haiku generator written in REXX (Score:5)
#!/usr/bin/rexx
/****** Haiku.rexx ************************************************* * ******************/
/*w = word(list,random(1,words(list)))*/
/*tem.7 = "#Never Always# a1, but a1,+H2 knows #no all# a1 n2s.+#Angry Gladdened#, #he she# v1s."*/
/*
*
* $VER: Haiku 2.0 (6.5.95) -- Generates pseudo-random Haiku poems
*
*************************************************
dummy = InitVocab()
dummy = time('l')
rseed = right(dummy,length(dummy)-lastpos('.',dummy))
dummy = random(,,rseed)
say '0A'x || GenHaiku()
exit 0
GenHaiku:
t = random(1,num_templates)
parse var tem.t line.1 '+' line.2 '+' line.3
out. = ''
do i = 1 to 3
do while length(line.i)>0
parse var line.i cmd 3 qual 4 line.i
c = left(cmd,1)
ucmd = translate(cmd)
if v.ucmd "" then
do
w = word(v.ucmd,random(1,words(v.ucmd)))
if datatype(c,'u') then
w = translate(left(w,1)) || substr(w,2)
c = translate(c)
if c = 'V' & qual = '@' then
w = add_ing(w)
else if c = 'N' & qual = 's' then
w = pluralize(w)
else
line.i = qual || line.i
end
else if c = '#' then
do
parse value cmd || qual || line.i with '#' list '#' line.i
say list
wordslist = words(list)
say wordslist
rand_word = random(1,wordslist)
say rand_word
w = word(list,rand_word)
say w
end
else
parse value cmd || qual || line.i with w 2 line.i
out.i = out.i || w
end
end
return translate(out.1 || '0a'x || out.2 || '0a'x || out.3 || '0a'x, ' ', '_')
index: procedure
haystk = arg(1)
needle = arg(2)
do idx = 1 to length(haystk)
if substr(haystk,idx,1) = needle then do
return idx
end
end
return 0
add_ing: procedure
exc. = 0
exc.whisper = 1
exc.wander = 1
exc.flutter = 1
exc.wither = 1
exc.wonder = 1
exv = translate(arg(1))
parse value arg(1) with 100-3 l3+1 l2+1 l1
if index("mbgprndlt",l1) > 0 & index("aeiou",l2) > 0 & index("aeiou",l3) = 0 then
do
if exc.exv 0 then
w = arg(1) || l1
else
w = arg(1)
end
else if l1 = 'e' then
w = left(arg(1),length(arg(1))-1)
else
w = arg(1)
return w || 'ing'
pluralize: procedure expose v.
exc. = 0
exc.rose = 1
exc.breeze = 1
exc.branch = 1
exc.beach = 1
exc.glance = 1
exc.thrush = 1
exc.child = 1
exc.fox = 1
exc.moss = 1
exc.sunrise = 2
exc.lotus = 2
exc.gecko = 10
exc.cry = 11
w = arg(1)
uw = translate(w)
do while exc.uw > 0 & exc.uw list = value('v.n'exc.uw)
w = word(list,random(1,words(list)))
uw = translate(w)
end
if datatype(left(arg(1),1),'u') then
w = translate(left(w,1))substr(w,2)
select
when exc.uw = 0 then w = w || 's'
when exc.uw = 10 then w = w || 'es'
when exc.uw = 11 then w = left(w,2) || 'es'
otherwise
inform("Invalid pluralize exception" exc.uw)
exit
end
return w
InitVocab:
v. = ""
v.a1 = "quick wild small hot white green blue pink thin old light dark"
v.a1 = v.a1 "sad deep lost free far slow sharp blunt hard soft damp dry"
v.a1 = v.a1 "bare tight loose low cold clean proud swift gnarled flat"
v.a1 = v.a1 "strong weak young dull ill"
v.a2 = "open lofty empty eager even weary leaden fallen dismal serene"
v.a2 = v.a2 "languid potent silver awkward shallow pliant simple wrinkled"
v.a2 = v.a2 "falling waiting sighing smiling dreaming sleeping dying"
v.a2 = v.a2 "almond jasmine mournful leaping supple"
v.n1 = "oak tree grove stream brook hill branch rose leaf breeze pool"
v.n1 = v.n1 "root thrush song moon cry glance flame child fox lamb shell"
v.n1 = v.n1 "moss cave cliff rock beach shore wave sea hand path bark fern"
v.n2 = "shadow forest clearing hunter sparrow mountain cavern shelter"
v.n2 = v.n2 "seagull lantern sunrise gecko welcome egret doorway water"
v.n2 = v.n2 "prison temple valley spirit soldier blossom lotus maple"
v.v1 = "walk write sing play look fail stray climb grow speak flow live"
v.v1 = v.v1 "soar crawl creep stand wake sink swim turn sit jump stink"
v.v1 = v.v1 "dive strive shine glow fade move crave spin hide writhe"
v.v2 = "wander desire return whisper decline accept withdraw contend"
v.v2 = v.v2 "rebel retire despair arise wither wonder bubble flutter grumble"
v.v2 = v.v2 "enchant descend ascend command"
v.p1 = "in near past through from"
v.p2 = "under over behind beyond above below around"
v.r1 = "where when while as"
v.l1 = "the this my your his her the the the"
v.h2 = "Gichin Koshi Raiko the_man a_maid Tanto the_queen Moki R.J. Gorby"
v.h2 = v.h2 "Sanka the_monk Glad_Child Yoko"
tem. = ""
tem.1 = "A1 n1, a2 n1.+L1 a1, a2 n2 v1s.+A1 n1, a1 n2."
tem.2 = "P2 the a1 n1,+R1 the a2 n2 v1s,+I v1; the n1 v1s."
tem.3 = "The a1 n1 v1@;+It is the a2 n2.+V2@, I v1."
tem.4 = "The a2 n1 v1s+R1 a2 n2s v2.+Does the a1 n1 v1?"
tem.5 = "Not a1, not a2,+H2 comes to the n2.+L1 a1 n2 v1s."
tem.6 = "A1, a2, a2,+H2 v1s. H2 v2s,+V2@, v1@."
do i = 1 while tem.i ""
end
num_templates = i-1
return 0
** EOF
*/
It will generate haikus along the line of:
Swift lamb, shallow rock.
This hard, waiting prison hides.
Low moss, damp mountain.
Enjoy!
--
Computer-Related Haiku (Score:5)
but the water has moved on.
This page is not here.
-- Cass Whittington
First snow, then silence.
This thousand dollar screen dies
so beautifully.
-- Simon Firth
The ten thousand things
How long do any persist?
Netscape, too, has gone.
-- Jason Willoughby
I know this is all in fun so I'm posting these three that I found at some online contest (posted without permission, sorry).
The idea, however, that what you are all making are actually haiku is just silly. Yes, there is generally a turn at the end (more of a spinning outward), and yes, there is traditionally a word indicating a season (kigo), but not just the words fall or spring, there were whole catalogs of words with their traditional seasonal indication. Cats, for instance, indicate a haiku about Spring.
Also, remember the whole 5-7-5 thing comes from Japanese, a language very different from our own. You would be better off trying to write three lines that you could say smoothly in one breath (in other words, not 7 one syllable words). There is so much more involved, though, like alliteration and literary allusions.
I highly recommend you all go read some *real* haiku by the masters: Basho, Issan, Buson, and Shiki, they will explain what haiku is all about far better than I can.