Sie sprechen von "Stoppwörter", die Redewendungen sind, wie "das" und "a", plus Wörter, die so oft angetroffen werden, dass sie wertlos sind.
Stoppwortlisten existieren; Wordnet hat eine, wenn ich mich recht erinnere und es könnte eine in Lingua oder die Ruby Wordnet for Ruby oder readablity Module, aber wirklich sie sind ziemlich einfach, sich selbst zu generieren. Und Sie müssen wahrscheinlich, da die Junk-Wörter abhängig von einem bestimmten Thema variieren.
Am einfachsten führen Sie einen vorbereitenden Durchlauf mit mehreren Beispieldokumenten durch und teilen Sie Ihren Text in Wörter, dann durchlaufen Sie sie, und für jedes erhöhen Sie einen Zähler. Wenn Sie fertig sind, suchen Sie nach Wörtern, die zwei bis vier Buchstaben lang sind und unverhältnismäßig viel höher sind. Das sind gute Kandidaten für Stoppwörter.
Führen Sie dann die Zieldokumente durch und teilen Sie den Text so auf, wie Sie es zuvor getan haben. Dabei werden die Vorkommen gezählt, während Sie fortfahren. Sie können Wörter in Ihrer Stoppwortliste entweder ignorieren und sie nicht zu Ihrem Hash hinzufügen oder alles verarbeiten und dann die Stoppwörter löschen.
text = <<EOT
You have reached this web page by typing "example.com", "example.net","example.org"
or "example.edu" into your web browser.
These domain names are reserved for use in documentation and are not available
for registration. See RFC 2606, Section 3.
EOT
# do this against several documents to build a stopword list. Tweak as necessary to fine-tune the words.
stopwords = text.downcase.split(/\W+/).inject(Hash.new(0)) { |h,w| h[w] += 1; h }.select{ |n,v| n.length < 5 }
print "Stopwords => ", stopwords.keys.sort.join(', '), "\n"
# >> Stopwords => 2606, 3, and, are, by, com, edu, for, have, in, into, net, not, or, org, page, rfc, see, this, use, web, you, your
Dann sind Sie bereit einige Keyword-Sammlung zu tun:
text = <<EOT
You have reached this web page by typing "example.com", "example.net","example.org"
or "example.edu" into your web browser.
These domain names are reserved for use in documentation and are not available
for registration. See RFC 2606, Section 3.
EOT
stopwords = %w[2606 3 and are by com edu for have in into net not or org page rfc see this use web you your]
keywords = text.downcase.split(/\W+/).inject(Hash.new(0)) { |h,w| h[w] += 1; h }
stopwords.each { |s| keywords.delete(s) }
# output in order of most often seen to least often seen.
keywords.keys.sort{ |a,b| keywords[b] <=> keywords[a] }.each { |k| puts "#{k} => #{keywords[k]}"}
# >> example => 4
# >> names => 1
# >> reached => 1
# >> browser => 1
# >> these => 1
# >> domain => 1
# >> typing => 1
# >> reserved => 1
# >> documentation => 1
# >> available => 1
# >> registration => 1
# >> section => 1
Nachdem Sie Sie Ihre Liste von Wörtern verengt haben, können Sie die Kandidaten durch WordNet laufen und Synonyme, Homonyme finden, Wort Beziehungen, Strip-Plural usw. Wenn Sie dies mit einer großen Menge an Text tun, sollten Sie Ihre Stoppwörter in einer Datenbank aufbewahren, in der Sie sie kontinuierlich verfeinern können. Das gleiche gilt für Ihre Keywords, denn von diesen können Sie beginnen, Ton und andere semantische Güte zu bestimmen.
Ich habe 'ruby' zu Ihrem Tag-Liste. –
Aber ich kann immer noch nicht herausfinden, was Sie fragen. Von welchem Keyword-API sprichst du? Wo extrahiert es Schlüsselwörter/Phrasen? Für welche Suche gibt es "Suchbegriffe", von denen du sprichst? –
Ich benutze AlchemyAPI, die Schlüsselwort-Methode extrahieren. Http://www.alchemyapi.com/api/keyword/ –