J'ai ce fichier texte que j'ai lu dans une application Java, puis je compte les mots ligne par ligne. En ce moment, je divise les lignes en mots par un
String.split([\\p{Punct}\\s+])"
Mais je sais que certains mots du fichier texte me manquent. Par exemple, le mot "ne peut pas" doit être divisé en deux mots "peut" et "t".
Les virgules et autres signes de ponctuation doivent être complètement ignorés et considérés comme des espaces. J'ai essayé de comprendre comment former une expression régulière plus précise pour le faire, mais je suis novice dans ce domaine et j'ai donc besoin d'aide.
Quel pourrait être un meilleur regex pour le but que j'ai décrit?
Vous avez une petite erreur dans votre regex. Essaye ça:
String[] Res = Text.split("[\\p{Punct}\\s]+");
[\\p{Punct}\\s]+
déplace le formulaire +
de la classe de caractères vers l'extérieur. Sinon, vous vous séparez également sur un +
et ne combinez pas les caractères séparés dans une ligne.
Donc je reçois pour ce code
String Text = "But I know. For example, the Word \"can\'t\" should";
String[] Res = Text.split("[\\p{Punct}\\s]+");
System.out.println(Res.length);
for (String s:Res){
System.out.println(s);
}
ce résultat
dix
Mais
JE
savoir
Pour
Exemple
la
Word
pouvez
t
devrait
Ce qui devrait répondre à vos besoins.
Comme alternative, vous pouvez utiliser
String[] Res = Text.split("\\P{L}+");
\\P{L}
signifie que ce n'est pas un point de code Unicode qui a la propriété "Letter"
Il existe un littéral autre que Word, \W
, voir Pattern
.
String line = "Hello! this is a line. It can't be hard to split into \"words\", can it?";
String[] words = line.split("\\W+");
for (String Word : words) System.out.println(Word);
donne
Hello
this
is
a
line
It
can
t
be
hard
to
split
into
words
can
it
Eh bien, voyant que vous voulez compter ne peut pas compter deux mots, essayez
split("\\b\\w+?\\b")
Essayer:
line.split("[\\.,\\s!;?:\"]+");
or "[\\.,\\s!;?:\"']+"
Ceci est une correspondance de l'un des caractères suivants: ., !;?:"'
(notez qu'il y a un espace mais pas/ou \) le + fait que plusieurs caractères sont comptés ensemble.
Cela devrait vous donner une précision généralement suffisante. Des expressions rationnelles plus précises nécessiteraient davantage d'informations sur le type de texte à analyser, car 'peut également être un délimiteur Word. Généralement, la plupart des délimiteurs Word de ponctuation se trouvent autour d’un espace, la correspondance sur [\\s]+
serait également une approximation proche. (mais donne le mauvais compte sur de courtes citations comme: Elle a dit: "non".)