Mobs
Mobs

Reputation: 1562

Text processing / comparison engine

I'm looking to compare two documents to determine what percentage of their text matches based on keywords.

To do this I could easily chop them into a set word of sanitised words and compare, but I would like something a bit smarter, something that can match words based on their root, ie. even if their tense or plurality is different. This sort of technique seems to be used in full text searches, but I have no idea what to look for.

Does such an engine (preferably applicable to Java) exist?

Upvotes: 2

Views: 658

Answers (3)

shsteimer
shsteimer

Reputation: 28800

I think Lucene might be along the lines of what your looking for. From my experience its pretty easy to use.

EDIT: I just reread the question and thought about it some more. Lucene is a full-text search engine for java. However, I'm not quite sure how hard it would be to re purpose it for what your trying to do. either way, it might be a good resource to start looking at and go from there.

Upvotes: 1

Gann Bierner
Gann Bierner

Reputation: 136

Yes, you want a stemmer. Lauri Karttunen did some work with finite state machines that was amazing, but sadly I don't think there's an available implementation to use. As mentioned, Lucene has stemmers for a variety of languages and the OpenNLP and Gate projects might help you as well. Also, how were you planning to "chop them up"? This is a little trickier than most people think because of punctuation, possesives, and the like. And just splitting on white space doesn't work at all in many languages. Take a look at OpenNLP for that too.

Another thing to consider is that just comparing the non stop-words of the two documents might not be the best approach for good similarity depending on what you are actually trying to do because you lose locality information. For example, a common approach to plagiarism detection is to break the documents into chunks of n tokens and compare those. There are algorithms such that you can compare many documents at the same time in this way much more efficiently than doing a pairwise comparison between each document.

Upvotes: 4

Jerry Coffin
Jerry Coffin

Reputation: 490338

I don't know of a pre-built engine, but if you decide to roll your own (e.g., if you can't find pre-written code to do what you want), searching for "Porter Stemmer" should get you started on an algorithm to get rid of (most) suffixes reasonably well.

Upvotes: 1

Related Questions