我有一个代码可以从文本文件中读取某些单词并成对显示(取决于它们在段落中的出现 - 对于Ex:
Hi I am <PER>Rita</PER>.I live in <LOC>Canada</LOC>
Hi I am <PER>Jane</PER> and I do not live in <LOC>Canada<LOC/>
Rita Canada
简加拿大
(注意:这不是xml文件。)
我希望输出这对(Rita Canada)= 1 [因为它们的发生之间有一个续路]和(简加拿大)= 0 [因为它们之间没有发生完全停止]
这是我的代码段输出名称段落。你能帮我识别一下全程吗?
private static final Pattern personPattern = Pattern.compile("<PER>(.+?)</PER>");
private static final Pattern locationPattern = Pattern.compile("<LOC>(.+?)</LOC>");
for(File file : listOfFiles)
{
BufferedReader input = new BufferedReader(new FileReader(file));
String line = "";
while((line = input.readLine()) != null)
{
ArrayList<String> persons = new ArrayList<String>();
ArrayList<String> locations = new ArrayList<String>();
Matcher m_person = personPattern.matcher(line);
while(m_person.find())
{
persons.add(m_person.group(1));
}
Matcher m_location = locationPattern.matcher(line);
while(m_location.find())
{
locations.add(m_location.group(1));
}
for(int i = 0;i<persons.size();i++)
{
for(int j =0 ;j<locations.size();j++)
{
System.out.println(persons.get(i) + "\t" + locations.get(j));
}
}
答案 0 :(得分:0)
PER标签是否总是在LOC标签之前?他们有时在不同的地方吗?
在下面的正则表达式中,我指定了一个正向前瞻(?=)
,其中包含一个与(?>\.)
匹配的原子组,如果不匹配则会失败。
然后交替使用第二个捕获组,以便在没有\.
的情况下模式可以继续匹配
\.
捕获组1: 丽塔
捕获组2: 简