0

大きなファイル(20 mb)にURLのリストがあり、一連のキーワードがあります。キーワードのセットがURLと一致する場合は、URLを抽出します。

例:keyword = "contact" URL:http ://www.365media.com/offices-and-contact.html

キーワードをURLのリストと一致させるための正規表現が必要です。

私のJavaコード:

public class FileRead {

    public static void main(String[] ags) throws FileNotFoundException
    {
        Scanner in=new Scanner(new File("D:\\Log\\Links.txt"));
        String input;
        String[] reg=new String[]{".*About.*",".*Available.*",".*Author.*",".*Blog.*",".*Business.*",
    ".*Career.*",".*category.*",".*City.*",".*Company.*",".*Contain.*",".*Contact.*",".*Download.*",
    ".*Email.*"};
        while(in.hasNext())
        {
            input=in.nextLine();
            //for(String s:reg)
                patternFind(input,".*email.*");
        }

    }
    public static void patternFind(String input,String reg)
    {
        Pattern p=Pattern.compile(reg);
            Matcher m=p.matcher(input);
            while(m.find())
                System.out.println(m.group());
    }
}
4

3 に答える 3

1

現在の行にキーワードが存在するかどうかのみを照合する場合は、単純に使用できます

for (String s: reg) {
  if (input.contains(s)) {
    // do something
  }
}

patternFind(input,". email. ");の代わりに

とにかく、単語のいずれかと一致する正規表現は次のようになります。

.*(About|Available|Author|And|So|On...).*

どちらが速いかわかりません。String.contains() はより単純です。パターンはプリコンパイルされており、ここでのケースのように、何度も適用するとパフォーマンスが向上します

于 2012-06-28T08:30:42.033 に答える
1

これができない理由:

For all line (URLs) in the file check if some of your pattern works on the URL

コードはかなり明白です

于 2012-06-28T08:31:41.100 に答える
0

少し一般的な解決策を示します。アイデアをコードに適応させることができるはずだと思います。

ファイルに裸のキーワードのリストがあり、それを に読み込むかString[]、キーワードのリストを にハードコードするとString[]します。次に例を示します。

String keywords[] = {"about", "available", "email"};

すべてのキーワードについて、Pattern.quote()リテラル文字列として認識されるようにするために使用します。次に、区切り文字 (OR) としてバー文字を使用してキーワードを連結し、|すべてを括弧で囲みます()。最終結果はこのようになります。または、自分でキーワードを見て、引用符\Q\E. Pattern.quote()キーワードに正規表現が含まれていないことが確実な場合は、この手順を無視することもできます。

(\Qabout\E|\Qavailable\E|\Qemail\E)

両端に追加.*して URL の残りの部分と一致させ(?i)、先頭に追加して大文字と小文字を区別しない一致を有効にします。

(?i).*(\Qabout\E|\Qavailable\E|\Qemail\E).*

次に、入力の各行でをコンパイルしPatternて呼び出し、URL にキーワードが含まれているかどうかを確認できます。matcher(inputString).matches()

「com」、「net」、「www」などの URL でキーワードがあまりにも一般的であり、検索をより細かくしたい場合は、さらに微調整を行う必要があります。

于 2012-06-28T08:40:51.920 に答える