Journal of my work
Week 1
The introduction week. Learned about the department
and their research interests and what projects they have going
on right now. Also learned a bit about Milwaukee and got orientated
on the social aspect of the town. Had a bit of background reading
to do and worked on a small part of one of their projects. This
was supposed to take a few weeks, but we got done in 3 days!! What
we had to do was to annotate/label 16 dialogs between a nurse and patient
in a semantic sense so we could semantically analyze an argument. We found a few
issues with the protocol for the labels, so revised the labels and
are reannotating now.
Week 2
After we finished annotating the dialogs semantically,
we used another annotation scheme called DAMSL
(Dialog Act Markup in Several Layers). It is a more in depth
look at how each utterence affects the over-all dialog; whether it
is responding to something already said, or moving forward a dialog,
etc. Each sentence, or utterence, can fit into more than one
category, so it takes time thinking and analyzing how it exactly affects
the dialog.
I also talked to Professor McRoy about a more in depth
project for the summer. We decided that I would work on implementing
a test for a previous project implemented by the NLKRRG, called Equuleus,
which is an advanced tutoring system. The test I will be implementing
is similar to the Cloze
Test. So I spent the rest of the week reviewing Java and the
swing package and starting a simple implementation of the intended program.
I haven't programmed in Java for two years, so it is taking me some
time getting used to that again. I have mainly been programming in
interpretive languages the past two semesters since I have been concentrating
on AI. Also, I have not had much experience using swing to create
GUI's, only a little group project a year ago, so I having to learn that
almost from scratch. Luckily, the internet provides some great examples
and tutorials, especially the Sun Microsystems page.
Week 3
I continued working on my cloze project this week. I
got most of the GUI working! It is fun to see your program actually
work with a GUI interface and have it look all professional and everything!
I still have a few wierd bugs, like when I add the text fields
for the blank words, some will only allow one character to be entered.
It is random ones that do this, and I am not sure why since I am
making them all the same way inside of a while loop. And the way
I had originally implemented it, you had to press the buttons in a certain
order for it to work, but I figured out how to fix that one, so you can
press them in any order now and it will work. I also got a file
mananger working, so the user can choose a file where the text is. It
really wasn't that hard, but it looks nice! It is wierd programming
for 7 hours a day. I am not used to doing one task for that long. At
school, I can go between tasks to split up the day, so this format is definately
something to get used to. I wonder if industry work is like this,
or if it is just the summer research format?
Week 4
I spent at least one day trying to figure out hash tables!!
Should have listened more carefully to that lecture two years
ago! But now that I have implemented one, they are fairly easy
to use and to understand. And they are fast! I also implemented
a cloze test that chooses low frequency words by using the hash table
(the word is the index and the value is the number of times it was found
in the document), so that took some time trying to work out the correct
algorithm so that there are not two blank words next to each other. I
also worked more on trying to debug my code a bit. I still can't
figure out my text field bug!! I am also working on getting a dialog
to pop up asking the user to input the window size for the low frequency
test (i.e. how many words to look through to find a low frequency word).
I was thinking about doing this with a text field, but then I would
have to validate the text and make sure they entered a number and not a
word. I tried to implement this, and it didn't work too well, so I
talked to my professor and we decided it would just be better to limit
the users choices anyways, so I will be using a drop down box now, which
is much easier to implement!
Week 5
Haha! Turns out that my text field bug was actually a bug
in JDK 1.4.1, so I downloaded and installed JDK 1.4.2 and that bug magically
disappeared! All that debugging for nothing! At least I
learned A LOT about JTextFields! A professor on the team also
took a look at my code and gave me some hints on how to make it more
"black box" so other users can use it without knowing how it was implemented.
That was kinda hard to change since I knew how it was implemented.
So I added more accessory methods so users have more control over
their data, so hopefully that helps. My professor is thinking this
program may be useful for some of her other projects, so it is important
that I implement it cleanly. My professor wanted another style of
the test implemented too--where the user can hand pick which words will
be left out in the test. This is proving to be more difficult than
I thought it would be at first. JList and JCheckBox don't do exactly
what I want them to do, at least not that I can see yet. Maybe next
week I will have an epiphany and it will work for me!
Week 6
I figured out how to get my JList/JCheckBox working. I
shoved it into a JDialog and that seems to do the trick! I also
made the interface more user-friendly by adding a menu bar instead of having
it all with buttons and such. This also helped with the inner logic,
also, which was nice. One problem I am having is how to make an instance
of the test stay until the user wants to change it. I will have to
play around with this and see what I can come up with. Another addition
I need to make to my test, or the interface to make the test, is to make it
serializable, meaning that an individual test can be saved to memory and thus
reused. I also started trying to integrate my test into the tutoring
program, Equuleus. One thing I have learned so far is to always assume
other people will be reading your code so therefore intuitive names should
be used in the naming of variables and methods, etc. The person who
wrote the original code has some random names in there which makes it hard
to tell exactly what it is supposed to be used for. Also, the version
I received is not working, so it is important to have it demoed on your
machine, too!! But I think I did a good job implementing my test in
the "black box" style becuase it should only take about 6-10 lines for me
to integrate it into his code. I also talked to my professor about
starting a new project next week that will hopefully involve more natural
language processing techniques, so my first task for that is to see how feasible
it would be to generate Spanish text. So, I have to find dictionaries
and grammars and see what kind of format they are in, so that should be really
interesting.
Week 7
I got my test integrated into Equuleus. It did only take
a few lines of code to get it integrated. I hadn't thought about
making the test a dialog becuase I didn't need to capture any information
from it using my front-end GUI, but I realized that the only way to wait
for the user to take the test was to make the test a dialog, so I had to
go and change my test class a little to incorporate that. My professor
also wanted to be able to have the test read in a file and use that file
when testing for frequencies, so I implemented that, too, this week. I
was having some trouble in my front-end, knowing when to create a new test
so the user wouldn't be asked multiple times the specifics of the test.
I had to play around with different ActionListeners and if statements,
but I got that finally working, too!! I also got it so that a cloze
object can be saved and thus reused. I had to figure out how to use
the Serializable interface for this. It was actually pretty simple once
I figured it out. After that, I learned how to make a JavaDoc file,
so documented my code using that.
Week 8
I made the final touches on my project this week. I tried
to make my program as robust as possible (i.e. catch possible user errors)
and learned that it worked well to wrap setX() functions to return a boolean
if it was legal and false otherwise instead of throwing a zillion exceptions.
I also tried to test my class pretty extensively, which helped inform
me of what kind of user errors could occur so I could try and catch them
in some way before the program exploded. I figured out how to use the
JavaDoc feature of JBuilder so went through my code and created an API of
sorts. I also wrote a README for my program. The main bug I
found in my code was that the text fields would be placed at the beginning
of the test instead of intermixed within the text of the test when calling
the test from a main method outside of the GUI. This was wierd because
it didn't do this using the GUI or in Equelues, so I am not quite sure why
it decided to act funny then. So I spent some time figuring that out.
Turns out it was this small function that I had in my code at one point
(borrowed from a book I was using) that I thought didn't do anything useful,
so I deleted it. Turns out it really did do something useful. So
I put that back in and everything is happy now. I think I am completely
done with that project now. I am also starting a new project this
week to give me something to do for the next two weeks. It's a small
project to see how feasible it would be to create a Spanish text generator,
mainly getting the correct word form for verbs and nouns taking into account
different aspects that would change the word, like plurality. I am
excited about this because I really wanted to do something with natural language
processing, especially with Spanish.
Week 9
This week I worked more on my Spanish generator. I finished generating
nouns and adjectives. I feel like I am hard coding the endings on becuase
I have a lot of if statements, but maybe that is the best way to go about
it. This project is very difficult because there are so many irregular
words. I also created a user manual for my Cloze Project and started
creating a distribution package for it, with stand alone executables for
different platforms and all the documents, etc. I designed a PowerPoint presentation for my project also, because
I am demoing my project to the group here next week. I added some small
extra features to my Cloze project also. I really really think it is
done now! I need to stop touching it!!
Week 10
My last week researching at UWM and being part of the DMP. This was
a busy week getting all the last little details together. I gave a
presentation using the PowerPoint show I made last week. I am working
on making a distrubution CD with documentation and everything, so I have
a professional looking distribution of my Cloze Project to show people. I
am also working on the final report for the DMP and getting my website all
wrapped up. I am trying to tye up any loose ends I may have left here,
so that my research will not be lost or misunderstood. I have had a
really good time researching this summer and I really feel like I learned
a lot. It was definately an invaluable experience.