1

我有一个从 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 个不同的头衔及其缩写(如先生、夫人、总统、先生等)的列表。我想在文件中使用此列表来搜索并从 peopleNames.txt 中删除这些标题。我不知道如何在 java 中处理它,因为我是 java 新手,需要修改 java 中生成 peopleNames.txt 的原始代码以适应标题删除。

我的程序将像 John Smith 先生这样的人识别为与 John Smith 不同的人,因此删除标题可以让我更准确地计算文章中提到的姓名。

提前感谢您的帮助。

4

2 回答 2

3

您可以使用正则表达式删除所有实例: public class Test {

    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);
    }
于 2013-04-25T09:06:13.680 回答
1

这就是我要做
的: 1. 解析titles.lst 文档并将每个标题放入一个集合
2. 解析peopleNames.txt,并为每一行检查名称是否在标题的集合中
3. 如果是,删除它.
4. 检查重复输入,因为 John Smith 先生和 John Smith 现在将是相同的。

于 2013-04-25T09:08:30.367 回答