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]); } } }
7 Réponses :
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..."
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. :(
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 code> identifie les phrases. P>
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. p>
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 Par exemple:
Le texte - p>
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. P>
blockQuote>
Après le marquage devient: p>
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 p>
blockQuote>
Vérifiez comment il a distingué l'arrêt complet (.) et la période après le 31 décembre ... p> ruby code> langue Comment exploitez-vous un paragraphe de texte en phrases? (perforablement en rubis) p>
première garniture () votre chaîne ... et utilisez ce lien p>
http://www.java-examples.com/java-string- Exemple fractionné & http: //wwww.rgagnon.com/javadetails/java-0438.html p>
Et vous pouvez également utiliser StringBuffer Class ... utilisez simplement ce lien, j'espère que cela vous aidera p>
Vous pouvez essayer d'utiliser le java.text.balliterator code> classe pour analyse de phrases. Par exemple:
Breakiterator Code> est une bonne idée, mais elle souffre de nombreux mêmes types de problèmes. Voir cette question: Stackoverflow.com/Questtions/17159513/...
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.
}
Rien à télécharger à cette URL. Il renvoie "Vous n'avez pas la permission d'accéder à / page / download_view / sur ce serveur."