我有一个从java程序输出的文本文件,它找到多个文档中提到的人名的频率,并将它们写入文件(peopleNames.txt),如下所示:
article1location\article1 name1:countofname1# name2:countofname2# name3:countofname3# ...
article2location\article2 name1:countofname1# name2:countofname2# name3:countofname3# ...
article3location\article3 name1:countofname1# name2:countofname2# name3:countofname3# ...
这些名称对应于每篇文章中标识的人名以及它们在文章中出现的频率,大约有90,000篇文章。我有另一个文本文件(titles.lst),其中包含大约40种不同标题及其缩写的列表(如Mr.,Mrs.,President,Sir等)我想在文件中使用此列表来搜索并从peopleNames.txt中删除这些标题。我不知道如何在java中进行,因为我是java的新手,需要修改java中的原始代码,生成peopleNames.txt以适应删除标题。
我的节目正在识别约翰史密斯先生与约翰史密斯不同的人,因此删除这些标题会让我更准确地计算文章中提到的名字。
提前感谢您的帮助。
答案 0 :(得分:3)
您可以使用正则表达式删除所有实例: 公共课测试{
public static void main( String[] args ) throws Exception {
String s = "Mr Tom and Ms Jane";
s = s.replaceAll("\\bMr\\b|\\bMs\\b", "");
System.out.println(s);
}
为了解释评论:
public static void main( String[] args ) throws Exception {
String [] titles = args;
String regex = "\\b"+titles[0]+"\\b";
for (int i=1; i<titles.length; i++) {
regex += "|\\b" + titles[i] + "\\b";
}
String s = "Mr Tom and Ms Jane";
s = s.replaceAll(regex, "");
System.out.println(s);
}
您也可以重复使用替换选项,而不是构建正则表达式。我实际上并不知道哪个更快。我猜测它取决于java的实现。
public static void main( String[] args ) throws Exception {
String [] titles = args;
String s = "Mr Tom and Ms Jane";
for (int i=1; i<titles.length; i++) {
s = s.replaceAll("\\b"+titles[0]+"\\b", "");
}
System.out.println(s);
}
答案 1 :(得分:1)
这就是我要做的事:
1.解析titles.lst文档并将每个标题放入Set中
2.解析peopleNames.txt,并为每一行检查名称是否在Title's Set中
3.如果是,请将其删除
4.检查双重录入,因为约翰史密斯和约翰史密斯现在将是相同的。