Я проанализировал текст с помощью синтаксического анализатора округа, скопировав результат в текстовый файл, как показано ниже:
(ROOT (S (NP (NN Yesterday)) (, ,) (NP (PRP we)) (VP (VBD went) (PP (TO to)....
(ROOT (FRAG (SBAR (SBAR (IN While) (S (NP (PRP I)) (VP (VBD was) (NP (NP (EX...
(ROOT (S (NP (NN Yesterday)) (, ,) (NP (PRP I)) (VP (VBD went) (PP (TO to.....
(ROOT (FRAG (SBAR (SBAR (IN While) (S (NP (NNP Jim)) (VP (VBD was) (NP (NP (....
(ROOT (S (S (NP (PRP I)) (VP (VBD started) (S (VP (VBG talking) (PP.....
Мне нужно извлечь все NounPhrases (NP) из этого текстового файла. Я написал следующий код, который извлекает только первый NP из каждой строки. Однако мне нужно извлечь все словосочетания с существительными. Мой код:
public class nounPhrase {
public static int findClosingParen(char[] text, int openPos) {
int closePos = openPos;
int counter = 1;
while (counter > 0) {
char c = text[++closePos];
if (c == '(') {
counter++;
}
else if (c == ')') {
counter--;
}
}
return closePos;
}
public static void main(String[] args) throws IOException {
ArrayList npList = new ArrayList ();
String line;
String line1;
int np;
String Input = "/local/Input/Temp/Temp.txt";
String Output = "/local/Output/Temp/Temp-out.txt";
FileInputStream fis = new FileInputStream (Input);
BufferedReader br = new BufferedReader(new InputStreamReader(fis,"UTF-8"
));
while ((line = br.readLine())!= null){
char[] lineArray = line.toCharArray();
np = findClosingParen (lineArray, line.indexOf("(NP"));
line1 = line.substring(line.indexOf("(NP"),np+1);
System.out.print(line1+"\n");
}
}
}
Результат:
(NP (NN Yesterday))...I need other NPs in this line also
(NP (PRP I)).....I need other NPs in this line also
(NP (NNP Jim)).....I need other NPs in this line also
(NP (PRP I)).....I need other NPs in this line also
Мой код принимает только первый NP в каждой строке с закрывающей скобкой, но мне нужно извлечь все NP из текста.