0

私の仕事は、ツリーをトラバースし、次の制約を使用してターゲット単語の周りに html タグを追加することです。

タグ付け可能な単語は、別の単語の一部ではないアルファベット文字のシーケンスであり、最後の文字として次の句読点のいずれかを持つことができます: ピリオド「.」、コンマ「,」、疑問符「?」、感嘆符「」 !」、コロン「:」、およびセミコロン「;」。

タグ付け可能な単語は、より長いテキストに埋め込むことができ (「The quick Brown fox」の「quick」のタグ付けなど)、含まれるテキスト内で複数回出現する可能性があることに注意してください。

別の例として、「cow」の周りに太字のタグを追加するように求められた場合、「cow」、「cow!」、「cow?」、「cow」、「cow!」、「cow?」、 "cow."、"cow;"、"cow:"、"cow"、"cOw". つまり、"cow"、"cow!"、"cow?"、"cow."、"cow:"、"cow;"、"COW"、"cOw" (最後の 2 つは大文字と小文字を区別しない一致) になります。 .

ただし、「cows」、「cowabunga」(どちらの場合も、それ自体では単語ではなく、より大きな単語の一部)、「?cows」、(文字だけではなく、句読点も最後の文字) "cow?!!", (末尾の句読点は 1 つだけ使用できます), "cow's" (アポストロフィは文字ではありません)。

ツリーをトラバースするのは問題ありませんが、タグを追加する適切な場所を決定するブロックを思いつくのに問題があります。

private void inorderAdd(TagNode root, String tag){
      if (root == null){
          return;
      }

      //Test if the tag is in the string at all
      if(root.tag.contains(tag)){
          String text = root.tag;
          String[] pieces =  text.split(" ");

          //check each array item for the target sequence
          for(int i = 0; i < pieces.length-1; i++){ 
              if(pieces[i].contains(tag)){

              }
          }
      }

      inorderAdd(root.firstChild, tag);
      inorderAdd(root.sibling, tag);

}

この時点で、各単語が区切られた配列に分割されたタグが含まれていることがわかっているフレーズがあります。ある時点で大文字と小文字を区別し、多くの句読点も考慮する必要があるため、ここからどこに行くべきかわかりません。

4

1 に答える 1

0

あなたはパターンを見るべきです

何かのようなもの:

Pattern reg = Pattern.compile( "\\b(" + tag + "[!.:?]?)\\b", Pattern. CASE_INSENSITIVE)

次に、次のように状態を確認できるはずです。

Matcher m = reg.matcher(text)
    ...
if (m.matches()) //true if found a match

m.start(1) / m.end(1) //get the exact location of matched word
于 2013-11-08T06:21:10.903 に答える