2010-11-01 7 views
3

J'ai utilisé le paquet d'exploration de texte de R et c'est vraiment un outil génial. Je n'ai pas trouvé de support de récupération ou peut-être qu'il y a des fonctionnalités qui me manquent. Comment un modèle VSM simple peut-il être implémenté en utilisant le paquet d'exploration de texte de R?Récupération de texte en utilisant R

+2

Veuillez fournir un contexte concernant le modèle VSM. – Shane

Répondre

0

En supposant VSM = modèle vectoriel, vous pouvez aller sur un simple système de récupération de la manière suivante:

  • Créer une matrice document terme de votre collection/corpus
  • Créer une fonction pour votre mesure de similarité (Jaccard, euclidien, etc.). Il y a des paquets disponibles avec ces fonctions. RSiteSearch devrait aider à les trouver.
  • Convertissez votre requête en une matrice de termes de document (qui aura 1 ligne et sera mappée en utilisant le même dictionnaire que celui utilisé pour la première étape)
  • Calcule la similarité avec la requête et la matrice dès la première étape.
  • Classez les résultats et choisissez le top n.

Une méthode non-R consiste à utiliser l'index GINI sur une colonne de texte (les lignes sont des documents) d'une table dans PostgreSQL. En utilisant les méthodes d'interrogation de ts_vector, vous pouvez avoir un système de récupération très rapide.

+0

vegan :: vegdist a un certain nombre d'indices de similarité non fournis par le paquet stats (au moins je ne peux pas les voir). –

+0

J'ai un problème avec l'implémentation de l'étape 3 dans R. Je ne trouve pas de fonctions qui me permettraient de faire ça dans R. Je sais comment VSM fonctionne et ce que vous avez donné ici est une réponse très large et naïve. Bien que j'apprécie la réponse, j'ai besoin de commandes et de bibliothèques R qui me permettraient de faire ce qui précède, en particulier l'étape 3 –

+0

Veuillez vérifier http://www.logic.at/staff/feinerer/publications/talks/237_GfKl_2006.pdf pour plus de robustesse clustering de texte. –

1
# Sample R commands in support of my previous answer 
require(fortunes) 
require(tm) 
sentences <- NULL 
for (i in 1:10) sentences <- c(sentences,fortune(i)$quote) 
d <- data.frame(textCol =sentences) 
ds <- DataframeSource(d) 
dsc<-Corpus(ds) 
dtm<- DocumentTermMatrix(dsc, control = list(weighting = weightTf, stopwords = TRUE)) 
dictC <- Dictionary(dtm) 
# The query below is created from words in fortune(1) and fortune(2) 
newQry <- data.frame(textCol = "lets stand up and be counted seems to work undocumented") 
newQryC <- Corpus(DataframeSource(newQry)) 
dtmNewQry <- DocumentTermMatrix(newQryC, control = list(weighting=weightTf,stopwords=TRUE,dictionary=dict1)) 
dictQry <- Dictionary(dtmNewQry) 
# Below does a naive similarity (number of features in common) 
apply(dtm,1,function(x,y=dictQry){length(intersect(names(x)[x!= 0],y))}) 
+0

Lorsque la requête n'a aucune caractéristique en commun avec le dictionnaire créé pour la collection, ces entités ne sont pas mappées. - "dictionary Un vecteur de caractères à tabuler contre Aucun autre terme ne sera listé dans le résultat Les termes du dictionnaire ne se trouvant pas du tout dans le document seront ignorés pour des raisons de performance Par défaut, aucune action (c.-à-d. considéré) - /library/tm/html/termFreq.html ". Je pense que je n'y avais pas pensé plus tôt. – harshsinghal

+0

dtmNewQry <- DocumentTermMatrix (newQryC, control = liste (weighting = weightTf, stopwords = VRAI, dictionary = dict1)) la ligne de code ci-dessus produit une erreur, veuillez utiliser dictionary = dictC à la place. –

Questions connexes