Comment puis-je extraire les mots communs entre deux ou plusieurs paragraphes dans php5? Je suppose que cela pourrait fonctionner pour résumer chaque texte pour créer une liste de mots hautement classés , puis les comparer.Extraction des mots communs entre deux paragraphes?
Répondre
Je suppose que la façon la plus simple serait de:
- Fendez chaque paragraphe dans un tableau de mots, en utilisant soit
explode
oupreg_split
- le premier pourrait être un peu plus rapide
- le second pourrait fournir un peu plus d'options
- peut-être, faire un filtrage sur la liste des mots:
- chaque mot
-
propre
- suppression des caractères spéciaux, comme les lettres accentuées
- tout de conversion pour réduire/majuscules, pour aider les comparaisons que vous allez faire plus tard
- remove trop mots communs
- supprimer trop court mots
array_filter
, ici, pourrait probablement aider
- chaque mot
- puis, obtenir la liste des mots qui sont dans les deux tableaux, en utilisant quelque chose comme
array_intersect
c'est une excellente méthode, pour le filtrage, une approche plus précise (mais plus complexe) consiste à réduire le poids des mots en fonction de leurs fréquences dans un grand corpus. par exemple le mot 'the' a une haute fréquence donc son classement sera grandement réduit. les mots ayant le rang le plus élevé sont alors plus représentatifs. – Mathieu
@mathroc: true; et, avec un peu de peaufinage, cela pourrait aussi permettre d'injecter un poids important pour certains mots spécifiques. –
Une autre torsion pourrait être d'utiliser http://tartarus.org/~martin/PorterStemmer/ dans le cadre de ceci. – goat
Il existe probablement un moyen plus rapide, mais vous pouvez omettre la ponctuation comme!? -./\ @ # $%^& *, puis exploser les deux paragraphes dans un tableau, puis essayez array_intersect() sur les deux tableaux. Tout ce qui se trouve dans le tableau 1 dans le tableau 2 devrait revenir en arrière.
http://php.net/manual/en/function.array-intersect.php
Théoriquement, vous devriez recevoir en retour un tableau de mots correspondant. De là, le classement est à vous et comment vous avez choisi de le faire.
+1 Battez-moi à ma réponse, même si j'aurais pu utiliser 'str_replace' pour gérer la ponctuation. – Isaac
- Fendez chaque paragraphe sur les espaces
- Sélectionnez un jeton du paragraphe A; si c'est dans le paragraphe B, placez-le dans un tableau 'matches'.
- Répétez l'étape 2 jusqu'à ce qu'il n'y en a plus dans le paragraphe A.
Cela semble être une réponse étrange d'avoir recueilli un downvote sans commentaire. Rien de manifestement incorrect au sujet de la théorie. – Beska
Je ne l'ai pas déprécié, mais je pense que c'est parce que le faire de cette façon semble si maladroit. Cela fonctionnerait, mais l'utilisation de fonctions de tableau est plus logique. En outre, rien n'a été mentionné à propos de la ponctuation, ce qui causera un problème si elle n'est pas supprimée. –
Quelque chose comme ceci pourrait fonctionner ...
<?php
$paragraph = "hello this is some sample text. Sample text is usually used to test a program. For example, this sample text will be used to test the script below.";
$words = array();
preg_match_all('/\w+/', $paragraph, $matches);
foreach($matches[0] as $w){
$w = strtolower($w);
if(!array_key_exists($w, $words)){
$words[$w] = 0;
}
$words[$w]++;
}
asort($words);
echo print_r($words, true);
/* Output
Array (
[hello] => 1
[will] => 1
[example] => 1
[a] => 1
[program] => 1
[usually] => 1
[Sample] => 1
[script] => 1
[below] => 1
[some] => 1
[the] => 1
[be] => 1
[for] => 1
[to] => 2
[is] => 2
[sample] => 2
[test] => 2
[used] => 2
[this] => 2
[text] => 3
) */
?>
<?php
/**
* Gets all the words as an array for a given text blob
*
* @param string $paragraph The pragraph in question
* @return string[] Words found
*/
function getWords($paragraph) {
//only lowercase
$paragraph = strtolower($paragraph);
//replace all non alpha num characters with spaces (this way periods won't screw
//with our words)
$paragraph = preg_replace("/[^a-z]/", " ", $paragraph);
$paragraph = explode(" ", $paragraph);
//get rid of empty words
$paragraph = array_flip($paragraph);
unset($paragraph[""]);
$paragraph = array_flip($paragraph);
return $paragraph;
}
$paragraph1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sit amet ante
nisl. Morbi tempor varius semper. Suspendisse vel nisi dui. Sed tristique consectetur imperdiet.
Morbi nulla diam, lobortis non eleifend eget, ullamcorper nec tortor. Duis quis lectus felis.
In vulputate varius luctus. Maecenas gravida laoreet massa quis faucibus. Duis dictum, dui sit
amet pharetra laoreet, tortor nisi mattis tortor, et ornare purus dolor vitae ligula. Sed id
orci ut dolor fermentum imperdiet. Nulla non justo urna, in suscipit nunc. Donec ut nibh risus,
ut tempus mi. Proin fringilla pretium urna sed faucibus. Proin et porttitor sem. Nulla eros
arcu, sodales et aliquam in, pharetra et mauris. Duis placerat blandit justo at tincidunt.
Etiam eu rutrum arcu.";
$paragraph2 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sit amet leo id
arcu feugiat tempus quis a risus. Proin non nisi augue. Cras ultricies dignissim augue vel gravida.
Vivamus sed orci sed leo sollicitudin aliquet non at dui. Nulla facilisi. Suspendisse nunc nibh,
sollicitudin vitae tincidunt eget, aliquet vitae magna. Aliquam vehicula cursus ante, vitae rhoncus
orci egestas et. Fusce condimentum metus at metus auctor pellentesque. Suspendisse potenti. Morbi
blandit, leo sed eleifend pretium, augue dui interdum eros, vel faucibus felis dolor id elit. Nam
condimentum, odio at mattis consequat, sem eros molestie risus, a tempus dolor arcu sit amet justo.";
$common = array_intersect(getWords($paragraph1), getWords($paragraph2));
sort($common);
var_dump($common);
?>
- 1. obtenir des nœuds communs entre deux balises
- 2. mots entre délimiteurs extraction [] en python
- 3. C# mots extraction
- 4. Trouver des mots entre 2 mots?
- 5. retour des champs communs dans deux fichiers
- 6. Extraction de modifications entre deux référentiels Mercurial distincts
- 7. Calcul des mots, des phrases et des paragraphes à partir du texte entré par l'utilisateur
- 8. Extraction de la lettre entre les balises
- 9. tri des données csv en fonction des occurrences de mots communs
- 10. Inclure l'espace entre deux mots Javascript if() instruction
- 11. Classer les mots anglais en rares et communs
- 12. Mise en place des contols communs dans deux onglets
- 13. SWT StyledText et l'espacement des paragraphes
- 14. Comment puis-je collecter les lignes entre deux mots clés?
- 15. Expression régulière, trouver un mot entre deux mots
- 16. Comment supprimer l'espace supplémentaire entre deux mots en utilisant C#?
- 17. Trouver du texte Entre deux mots en Java
- 18. Comparaison d'éléments communs entre 2 listes
- 19. parsings chaînes: extraction de mots et de phrases [JavaScript]
- 20. Comment puis-je compter le nombre de mots entre deux mots?
- 21. Trouver les éléments communs/hors du commun entre deux tableaux en PHP
- 22. Comment augmenter l'espacement entre les paragraphes dans Crystal Reports PDF
- 23. correspondants paragraphes avec regex
- 24. une chaîne entre extraction des caractères spécifiés dans python
- 25. paragraphes fonctionnels
- 26. LATEX: Comment créer des paragraphes alignés à gauche et auteurs alignés droit des paragraphes
- 27. Dire la différence entre deux gros morceaux de texte
- 28. Comment trouver des dates/jours communs dans deux plages de dates
- 29. lien CSS espacement et espacement des paragraphes
- 30. Extraction de mots-clés Linq - portée d'extraction limite
Pouvez-vous donner un exemple d'entrée et de sortie prévue? – Gumbo