7
votes

Comment analyser le texte en phrases

J'essaie de briser un paragraphe en phrases. Voici mon code jusqu'à présent:

import java.util.*;

public class StringSplit {
 public static void main(String args[]) throws Exception{
     String testString = "The outcome of the negotiations is vital, because the current tax levels signed into law by President George W. Bush expire on Dec. 31. Unless Congress acts, tax rates on virtually all Americans who pay income taxes will rise on Jan. 1. That could affect economic growth and even holiday sales.";
     String[] sentences = testString.split("[\\.\\!\\?]");
     for (int i=0;i<sentences.length;i++){  
         System.out.println(i);
      System.out.println(sentences[i]);  
     }  
 }
}


0 commentaires

7 Réponses :



2
votes

Le premier est un problème assez difficile à faire correctement, car vous devriez mettre en œuvre la détection de la peine. Je vous suggère de ne pas faire cela et juste des phrases séparées avec deux lignes vides après une marque de ponctuation. Par exemple:

String one = "   and now...    ";
String two = one.trim();
System.out.println(two);          // output: "and now..."


1 commentaires

Le problème avec votre première solution est que, au cours de la dernière décennie, il y a eu un passage d'insertion de deux espaces entre des phrases à l'insertion d'un seul. Pour l'écriture effectuée avec ce style nouveau, votre solution ne fonctionnera pas. :(



0
votes

Compte tenu du format d'entrée actuel, il sera difficile de se diviser en phrases. Vous devez imposer une règle supplémentaire de règles pour identifier la fin d'une phrase, en plus de la période. Par exemple, cette règle pourrait être "une phrase devrait se terminer par une période (.) Et deux espaces". (Voici comment l'outil UNIX GREP identifie les phrases.


0 commentaires

14
votes

Le problème que vous avez mentionné est un problème NLP (traitement de la langue naturelle). Il convient d'écrire un moteur de règle brut, mais cela pourrait ne pas être augmenté pour soutenir le texte anglais complet.

Pour avoir une perspicacité plus profonde et une bibliothèque Java, consultez ce lien http: // nlp.stanford.edu/software/lex-parser.shtml , http: //nlp.stanford.edu:8080/Parser/index.jsp et question similaire pour ruby ​​ langue Comment exploitez-vous un paragraphe de texte en phrases? (perforablement en rubis)

Par exemple: Le texte -

Le résultat des négociations est vital, parce que les niveaux d'imposition actuels Signé en droit par le président George W. Bush expire le 31 décembre. Sauf si Actes de congrès, taux d'imposition sur pratiquement Tous les Américains qui paient des impôts sur le revenu augmentera le 1er janvier. Cela pourrait affecter croissance économique et même vacances Ventes.

Après le marquage devient:

résultat / dt / nn de / in the / dt Négociations / NNS est / VBZ Vital / JJ, /, Parce que / dans la / DT Current / JJ Tax / NN Niveaux / NNS Signé / VBN dans / en droit / nn par / dans le président / nnp george / nnp w./nnp Bush / NNP expire / VBP ON / RP DEC./NNP 31 / CD ./. Sauf si / dans le Congrès / NNP Actes / VBZ, /, Taxe / NN Tarifs / NNS ON / IN Pratiquement / RB Tous / RB Américains / NNPS OMS / WP Pay / VBP Revenu / NN Taxes / NNS Will / MD Rise / VB ON / EN JAN./NNP 1 / CD ./. Que / dt pourrait / md affecte / vb Croissance économique / JJ / NN et / CC Même / RB Ventes / NN Sales / NNS ./. Parse

Vérifiez comment il a distingué l'arrêt complet (.) et la période après le 31 décembre ...


0 commentaires

-1
votes

première garniture () votre chaîne ... et utilisez ce lien

http://www.java-examples.com/java-string- Exemple fractionné & http: //wwww.rgagnon.com/javadetails/java-0438.html

Et vous pouvez également utiliser StringBuffer Class ... utilisez simplement ce lien, j'espère que cela vous aidera


0 commentaires

3
votes

Vous pouvez essayer d'utiliser le java.text.balliterator classe pour analyse de phrases. Par exemple: xxx


1 commentaires

Breakiterator est une bonne idée, mais elle souffre de nombreux mêmes types de problèmes. Voir cette question: Stackoverflow.com/Questtions/17159513/...



0
votes

Vous pouvez utiliser la classe phrasesClitter code> fourni par cette bibliothèque source ouverte Ici .

SentenceSplitter sp = new SentenceSplitter("filename");
String str = null;
while((str = sp.next().toString()) != null)
{
    //Your code here.
}


1 commentaires

Rien à télécharger à cette URL. Il renvoie "Vous n'avez pas la permission d'accéder à / page / download_view / sur ce serveur."