1

いくつかの一般的な単語をフィルタリングするための私の正規表現は次のとおりです。

copyInputString.replaceAll("\\b(" +"http"+ ")\\b", " ");

「http」を置き換えて単語のリストを置き換える方法は?つまり、フィルター処理のために 1 つの単語を単語リストに置き換えるということです。

コードの書き方は?私が試してみました:

String commonWords = "http + haha + ...";

しかし、うまくいきません。助けが必要

4

4 に答える 4

2

最適な方法は、フィルター処理するノイズ ワードの数、実行する置換の種類、および処理するテキストの量によって異なります。

単語ノイズ

パージ

「http」、「otherword」、および「anotherword」をすべて削除するなどの簡単なことをしている場合は、OR ステートメントを使用して正規表現を作成できます。

\b(http|otherword|anotherword)\b

削除する単一単語の膨大なリストがあり、比較的短い文字列を処理する場合は、ノイズ ワードのハッシュセットを作成し、入力文字列をトークン化して、各トークンがノイズかどうかを確認できます。語。

カスタム交換

ノイズ ワードのハッシュセットを作成する代わりに、単語と置換値を使用してハッシュマップにすることができます。

マルチワード ノイズ

パージ

複数単語のノイズを消去しようとしている場合、最初の方法は引き続き機能します。

\b(phrase one|phrase two|four word noise phrase)\b

リストが非常に大きくなると、これも醜くなる可能性があります。

カスタム交換

複数単語のフレーズでカスタム置換を行いたい場合、事態はさらに複雑になります。String.indexOf(String) のループで遊んで、ノイズ フレーズがそこにあるかどうかを確認したり、複数の正規表現置換を実行したり、大きな醜い結合正規表現の各単語に対して一意のキャプチャ グループを作成したりできます。

\b((phrase one)|(phrase two)|(four word phrase))\b

キャプチャされたグループが 2 の場合、フレーズ 1 が一致しました。3 の場合、フレーズ 2 が一致しました。など...次に、ハッシュマップ/配列/その他から対応する置換値を取得して、プラグインします。



正規表現を使用することになり、パフォーマンスが低下し始めた場合は、通常、より効率的な置換プロセスのために複数の表現を組み合わせることができることに注意してください。

"apple", "apples", "applesauce" -> apple(s(auce)?)?

于 2013-09-22T09:30:39.803 に答える
1

リストにすべての単語を追加してから、次のように正規表現を作成します。

List wordList = new ArrayList<String>();
// populate your wordList

// build the regex
String lstr = wordList.toString();
String regex  = lstr.substring(1, lstr.length()-1).replace(", ", "|");

// replacement
String replaced = copyInputString.replaceAll("\\b(" + regex + ")\\b", " ");
于 2013-09-22T09:31:37.047 に答える
0

正規表現は

String commonWordsRegex = "\\b(http|haha|commonWords)\\b";

単語のリストを で連結し|ます。

于 2013-09-22T09:11:59.350 に答える
0

このようにパイプ演算子を使用するのはどうですか?

String input = "Karel Alena Josef Petr Marta Vojtěch";
String regexp = "\\bAlena\\b|\\bMarta\\b";  
String output = input.replaceAll(regexp, " ");
assert("Karel   Josef Petr   Vojtěch".equals(output));
于 2013-09-22T08:56:32.793 に答える