Vous parlez de "mots vides", qui sont des articles de style, tels que "le" et "a", plus des mots qui sont si souvent rencontrés qu'ils ne valent rien.
Des listes de mots vides existent; Wordnet en a un si je me souviens bien et il pourrait y en avoir un en Lingua ou les modules Ruby Wordnet for Ruby ou readablity, mais vraiment ils sont assez faciles à générer soi-même. Et, vous avez probablement besoin de puisque les mots indésirables varient en fonction d'un sujet particulier. La meilleure chose à faire est d'exécuter une passe préliminaire avec plusieurs exemples de documents et de diviser votre texte en mots, puis faire une boucle sur eux, et pour chaque incrément un compteur. Lorsque vous avez terminé, cherchez les mots longs de deux à quatre lettres et les chiffres sont disproportionnés. Ce sont de bons candidats pour les mots vides.
Puis exécutez passe sur vos documents cible, en séparant le texte comme vous l'avez fait précédemment, en comptant les occurrences que vous allez. Vous pouvez soit ignorer les mots dans votre liste de mots vides et ne pas les ajouter à votre hash, soit tout traiter, puis supprimer les mots vides.
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
Alors, vous êtes prêt à faire une collecte mot clé:
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
Une fois que vous avez réduit votre liste de mots que vous pouvez exécuter les candidats par WordNet et trouver des synonymes, homonymie, mot Si vous faites cela avec beaucoup de texte, vous devrez garder vos mots vides dans une base de données où vous pouvez les affiner continuellement. La même chose s'applique à vos mots-clés, car à partir de ceux-ci, vous pouvez commencer à déterminer le ton et les autres qualités sémantiques.
J'ajouté 'ruby' à votre liste de tags. –
Mais je n'arrive toujours pas à comprendre ce que vous demandez. De quelle API mot clé parlez-vous? Où extrait-t-il des mots-clés/phrases? Pour quelle recherche y a-t-il des "termes de recherche" dont vous parlez? –
J'utilise AlchemyAPI, le mot clé extract methods.http: //www.alchemyapi.com/api/keyword/ –