Question

Je l'ai écrit ce morceau de code qui divise une chaîne et la stocke dans un tableau de chaînes: -

String[] sSentence = sResult.split("[a-z]\\.\\s+");

Cependant, j'ai ajouté le [a-z] parce que je voulais traiter certains des problèmes d'abréviation. Mais mon résultat apparaît comme si: -

  

De plus, lorsque Everett a essayé de les instruire en mathématiques de base elles se sont avérées unresponsiv

Je vois que je perds le motif spécifié dans la fonction split. Il me va bien pour perdre de la période, mais perdre la dernière lettre du mot dérange son sens.

aide quelqu'un pourrait me avec cela, et en plus, pourrait me aider quelqu'un à traiter avec les abréviations? Par exemple, parce que je diviser la chaîne en fonction des périodes, je ne veux pas perdre les abréviations.

Était-ce utile?

La solution

L'analyse syntaxique des phrases est loin d'être une tâche triviale, même pour les langues latines comme l'anglais. Une approche naïve comme celle que vous décrivez dans votre question échouera assez souvent qu'il se révélera inutile dans la pratique.

Une meilleure approche est d'utiliser un BreakIterator configuré avec le droit Locale.

BreakIterator iterator = BreakIterator.getSentenceInstance(Locale.US);
String source = "This is a test. This is a T.L.A. test. Now with a Dr. in it.";
iterator.setText(source);
int start = iterator.first();
for (int end = iterator.next();
    end != BreakIterator.DONE;
    start = end, end = iterator.next()) {
  System.out.println(source.substring(start,end));
}

donne le résultat suivant:

  1. Ceci est un test.
  2. Ceci est un T.L.A. test.
  3. Maintenant, avec un docteur en elle.

Autres conseils

Il sera difficile d'obtenir une expression régulière au travail dans tous les cas, mais pour résoudre votre problème immédiat, vous pouvez utiliser un lookbehind:

String sResult = "This is a test. This is a T.L.A. test.";
String[] sSentence = sResult.split("(?<=[a-z])\\.\\s+");

Résultat:

This is a test
This is a T.L.A. test.

Notez qu'il ya des abbréviations qui ne se terminent pas par des lettres majuscules, comme abbrev., M., etc ... Et il y a aussi des phrases qui ne se terminent pas par périodes!

Si vous le pouvez, utilisez un outil de traitement du langage naturel, comme LingPipe . Il y a beaucoup de subtilités qui seront très difficiles à attraper en utilisant des expressions régulières, par exemple, ( par exemple :-)), M.. , abréviations , ellipsis (...), et ainsi de suite .

Il est très facile à suivre tutoriel sur Détection de phrase sur le site de LingPipe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top