2016-11-08 1 views
-5

Ich habe eine Zeichenfolge, die mehrere NP(), zwischen „NP (‘ und ‚)‘ hat die Daten ich will. Aber ich will nur NP Daten in nicht dem ersten NP außerhalbExtract Substrings mit regex Java

Wie kann ich eine Regex schreiben, um "(DT a) (NN-Zeichen)", "(DT die) (NN-Fassade)" aus dem folgenden Text zu extrahieren? Ich wollte für jeden Text, NP enthalten, um nur innerhalb NP-Daten zu extrahieren ..ich hoffe, dass ich gut erklärt, das Problem

(ROOT (NP (NP (DT a) (NN sign)) (PP (IN on) (NP (NP (DT the) (NN facade)) (PP (IN of) (NP (DT the) (NN building))))))) 
+0

Siehe http://nlp.stanford.edu/nlp/javadoc/ javanlp/edu/stanford/nlp/trees/Baum.html # getLeaves% 28% 29 –

+1

Bitte verstehen Sie, dass SO kein Ort ist, wo Sie kommen und Ihre Anforderungen fallen lassen, so dass andere Leute beginnen, die Arbeit für Sie zu erledigen. In diesem Sinne - wenn Sie nach * Code Hilfe * fragen, geben Sie bitte den * Code * an, den Sie bisher geschrieben haben, und erklären Sie, wo Sie feststecken. – GhostCat

+0

Ich habe es getan, und es gibt mir: graph: -> Sign-NN (root) -> a-DT (det) -> Fassaden NN (prep_on) -> the-DT (det) - > building-NN (prep_of) -> the-DT (det) – Nana

Antwort

0

Diese Regex alle Daten übereinstimmen, die Sie fragen:

\(DT\s\w+.{3}NN\s\w+\) 

Wo \(DT\s\w+ Spiel des Bestimmer, thr weißer Raum und die Zeichenfolge, .{3} Spiel ) ( und NN\s\w+\) Spiel der Noun, singular or mass.
Mit RegexPal die Daten übereinstimmen, aber wenn Sie verwenden möchten es in Java-Code müssen Sie die charactes entkommen, so dass es wie folgt aussehen:

Pattern p = Pattern.compile("\\(DT\\s\\w+.{3}NN\\s\\w+\\)"); 
+0

Ausnahme im Thread "main" java.util.regex.PatternSyntaxException: Nicht geschlossene Zeichenklasse in der Nähe von Index 33 \ ([DT \ s [az] + \) \ s \ (NN \ s [a-zA-Z] + \) – Nana

+0

Ok, sieh es dir jetzt an. – Tinwor

+0

es funktioniert ;; Aber es gibt mir nur ein Zeichen nicht das Gebäude und die Fassade: / – Nana