--xmlfilter オプションを有効にして HTML ファイルのスペルチェックを行うLanguageTool (LT) を使用しています。これにより、LanguageTool はスペル チェックを実行する前にすべてのタグを強制的に削除します。
これは、LT がタグを「認識」しないため、報告されたすべての文字位置がずれていることも意味します。
たとえば、次の HTML フラグメントを確認すると:
<p>This is kin<b>d</b> o<i>f</i> a <b>stupid</b> question.</p>
LanguageTool はそれをプレーン テキストの文として扱います。
This is kind of a stupid question.
次のメッセージを返します。
<error category="Grammar" categoryid="GRAMMAR" context=" This is kind of a stupid question. " contextoffset="24" errorlength="9" fromx="8" fromy="8" locqualityissuetype="grammar" msg="Don't include 'a' after a classification term. Use simply 'kind of'." offset="24" replacements="kind of" ruleId="KIND_OF_A" shortmsg="Grammatical problem" subId="1" tox="17" toy="8"/>
(この特定の例では、LT は「一種の a」にフラグを立てています。)
検索文字列はタグで囲まれている可能性があり、複数回発生する可能性があるため、単純なインデックス検索を実行できません。
HTML ファイル内の特定のテキスト文字列を確実に見つけるための最も効率的な Python ソリューションは何でしょうか? (LT はおおよその文字位置を返します。これは、タグの数、およびフラグが設定された単語の前後の単語に応じて、10 ~ 30% ずれている可能性があります。)
つまり、すべてのタグを無視する検索を行う必要がありますが、それらを文字位置カウントに含めます。
この特定の例では、「kind of a」を見つけて、文字 k の場所を見つける必要があります。
kin<b>d</b> o<i>f</i>a