1

複数のドキュメントで言及されている人の名前の頻度を見つけて、次のようにファイル (peopleNames.txt) に書き込む Java プログラムから出力されたテキスト ファイルがあります。

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 の記事があります。約 40 の異なるタイトルとその略語 (Mr.、Mrs.、President、Sir など) のリストを含む別のテキスト ファイル (titles.lst) があります。ファイルでこのリストを使用して検索したいと思います。これらの役職を peopleNames.txt から削除します。私はJavaが初めてで、タイトルの削除に対応するためにpeopleNames.txtを生成したJavaの元のコードを変更する必要があるため、Javaでそれを行う方法がわかりません。

私のプログラムは、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);
    }

正規表現を作成する代わりに、replace オプションを繰り返し使用することもできます。どちらが速いかは正直わかりません。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. Mr. John Smith と John Smith が同じになるため、重複エントリを確認します。

于 2013-04-25T09:08:30.367 に答える