J'utilise Delphi 7. Je voudrais compter le nombre de répétitions de chaque mot dans un grand texte (500 mots). Comment pourrais-je le faire?Statistiques des mots dans un texte avec Delphi
Répondre
Voici une sorte de méthode de force brute de le faire. il utilise une liste de chaînes et stocke le nombre de mots cast en tant qu'objet dans l'élément de liste.
var
i : integer;
iCount : integer;
idxFound : integer;
someText : string;
s : TStringList;
oneWord : string;
begin
someText := 'this that theother and again this that theother this is not that';
oneWord := '';
s := TStringList.Create;
for i := 1 to length(someText) do begin
if someText[i] = ' ' then begin
idxFound := s.indexof(oneWord);
if idxFound >= 0 then begin
iCount := integer(s.objects[idxFound]);
s.Objects[idxFound] := TObject(iCount + 1);
end
else begin
s.AddObject(oneWord, TObject(1));
end;
oneWord := '';
end
else begin
oneWord := oneWord + someText[i];
end;
end;
if oneWord <> '' then
if idxFound >= 0 then begin
iCount := integer(s.objects[idxFound]);
s.Objects[idxFound] := TObject(iCount + 1);
end
else begin
s.AddObject(oneWord, TObject(1));
end;
// put the results on the screen in a text box.
memo1.Text := '';
for i := 0 to s.Count - 1 do
memo1.Lines.Add(intToStr(integer(s.Objects[i])) + ' ' + s[i]);
s'il s'agit d'une liste de chaînes triées, vous pouvez utiliser "s.find" au lieu de "s.indexof". Vous pouvez également définir la sensibilité à la casse de la liste de chaînes en fonction de votre implémentation. –
Merci Don: c'est exactement ce que je veux faire! Est-il possible d'utiliser un délimiteur différent (en plus de l'espace '')? –
bien sûr, il suffit de changer la ligne: si someText [i] = '' alors commencez pour vérifier quel (s) délimiteur (s) vous voulez –
Je ne me souviens pas des fonctions Delphi intégrées qui le font directement. Mais une simple méthode O (n * Log (n)) serait de trier les mots puis de les scanner et de les compter.
Salut Mark: pourriez-vous s'il vous plaît me donner un exemple de la mise en œuvre? –
@ mo3ez: Désolé - je n'ai pas le temps disponible en ce moment. Cependant, le compte des mots de Marco est un bon début pour l'analyse des mots. Mettez les mots individuels dans un tableau et triez-les. Voir le post SO http://stackoverflow.com/questions/41733/best-way-to-sort-an-array-in-delphi pour un bon exemple de tri. –
Si nous parlons du nombre de mots dans une chaîne de texte, ce que vous pourriez faire était d'analyser la chaîne, et d'identifier les mots. Ajoutez les mots à une carte, où l'identificateur est le mot lui-même, et la valeur un nombre. Ce nombre est augmenté si le mot que vous trouvez dans la chaîne existe déjà dans la carte.
map<string, int>
foreach word in string
if word is in map
map[word] = map[word] + 1
else
map[word] = 1
end if
end for
Puisque je ne connais pas bien Delphi, j'ai essayé de vous fournir un exemple de pseudo-code.
de la bibliothèque de la FPC:
function WordCount(const S: string; const WordDelims: TSysCharSet): Integer;
var
P,PE : PChar;
begin
Result:=0;
P:=Pchar(pointer(S));
PE:=P+Length(S);
while (P<PE) do
begin
while (P<PE) and (P^ in WordDelims) do
Inc(P);
if (P<PE) then
inc(Result);
while (P<PE) and not (P^ in WordDelims) do
inc(P);
end;
end;
wordcount (test, [ ' '! '','', '', '', # 10, # 13]); serait une bonne première tentative. Cela signifiait pour des calculs de magnitude simple, car il p. Ex. ne prend pas soin des mots abrégés.
Bien sûr, si vous le présentez comme devoir, il vous sera probablement demandé d'expliquer son fonctionnement.
Alors que cet exemple comptera le nombre de mots dans une chaîne, il ne comptera pas le nombre d'occurrences de chaque mot, comme l'auteur l'a demandé. Il devrait être capable de cela, bien que quelques ajustements mineurs soient apportés. –
Merci Marco. À quoi sert le deuxième paramètre? Comment puis-je lister tous les mots «uniques» d'un texte, puis les transmettre un par un à la fonction afin d'obtenir les statistiques dont j'ai besoin (occurrences par mot). –
un TSTListe peut également être utilisé pour la "liste de mots". Exécutez tous vos mots et ajoutez chacun à la liste tString en tant que nouvel élément. Lorsque vous avez terminé, vous avez un compte TOTAL, pour déterminer les mots uniques, trier la liste, et dans une boucle, voir si le mot actuel est différent du mot précédent ... si c'est le cas, incrémenter le nombre de mots uniques.
- 1. Existe-t-il un package de statistiques gratuit pour Delphi?
- 2. Recherche de mots-clés dans un texte avec une hashtable
- 3. Comment reconnaître des mots dans un texte avec des jetons sans mot?
- 4. Comment rassembler les statistiques d'utilisation des caractères dans un fichier texte en utilisant des commandes Unix?
- 5. Comment supprimer des mots d'un texte multilingue?
- 6. Dans quel cas IE8 répète-t-il des mots (texte) dans des zones de texte multilignes?
- 7. Recherche plein texte avec Firebird et Delphi
- 8. Comment puis-je mettre en évidence des mots complets avec des mots-clés avec regexp?
- 9. Comment diviser un fichier texte en mots?
- 10. Comment rechercher des mots dans ma colonne de texte? mysql?
- 11. Existe-t-il des outils shell Unix pour calculer diverses statistiques de mots sur des fichiers?
- 12. mots Extrait sur un fichier texte
- 13. graphiques statistiques avec as3?
- 14. Statistiques avec numpy
- 15. Travailler avec des chaînes Unicode dans Delphi 7
- 16. Comptage des mots répétés dans un fichier
- 17. Nombre de mots dans un champ de texte Notes
- 18. Activation des statistiques ehcache dans jboss 4.2.1
- 19. Delphi Form (DFM) Texte
- 20. Un moyen rapide de faire correspondre un tableau de mots avec un bloc de texte?
- 21. Recherche avec des mots d'un caractère (MySQL)
- 22. Stockage et affichage des statistiques
- 23. Quel est le meilleur moyen d'introduire le décryptage et l'affichage des mots de passe dans delphi
- 24. Comment exporter des statistiques Oracle
- 25. Suivi des statistiques des visiteurs avec Ruby on Rails
- 26. statistiques de recherche populaires
- 27. Afficher un balisage simple dans une étiquette dans Delphi
- 28. Problème avec delphi tdbrichedit
- 29. pour trouver la fréquence des mots dans un fichier texte en utilisant java
Cela me ressemble. – mj2008
trop vieux pour cela: p –