NLPのトークン化タスクを処理し、Perl scriptからPython scriptにスクリプトを移植するのが目的です。PythonとPerlの正規表現のバックスラッシュとエスケープ文字
主な問題は、私たちがトークナイザのPythonのポートを実行したときに起こる誤ったバックスラッシュが付いています。何とか文字通りアンパサンドのエスケープ
>>> import re
>>> from six import text_type
>>> sent = text_type("this ain't funny")
>>> escape_singquote = r"\'", r"\'" # escape the left quote for XML
>>> contraction = r"n't", r" n't" # pad a space on the left when "n't" pattern is seen
>>> text = sent
>>> for regexp, substitution in [contraction, escape_singquote]:
... text = re.sub(regexp, substitution, text)
... print text
...
this ai n't funny
this ai n\'t funny
Pythonの
に正規表現を移植my($text) = @_; # Reading a text from stdin
$text =~ s=n't = n't =g; # Puts a space before the "n't" substring to tokenize english contractions like "don't" -> "do n't".
$text =~ s/\'/\'/g; # Escape the single quote so that it suits XML.
としてこれを追加しました:
Perlでは、我々は、単一引用符とのようなアンパサンドをエスケープする必要がある可能性がありリテラルバックスラッシュ=(
これを解決するには、私はできる:
>>> escape_singquote = r"\'", r"'" # escape the left quote for XML
>>> text = sent
>>> for regexp, substitution in [contraction, escape_singquote]:
... text = re.sub(regexp, substitution, text)
... print text
...
this ai n't funny
this ai n't funny
しかし、一見Pythonで単一引用符をエスケープせずに、私たちも望ましい結果を得る:
>>> import re
>>> from six import text_type
>>> sent = text_type("this ain't funny")
>>> escape_singquote = r"\'", r"\'" # escape the left quote for XML
>>> contraction = r"n't", r" n't" # pad a space on the left when "n't" pattern is seen
>>> escape_singquote = r"'", r"'" # escape the left quote for XML
>>> text = sent
>>> for regexp, substitution in [contraction, escape_singquote]:
... text = re.sub(regexp, substitution, text)
... print text
...
this ai n't funny
this ai n't funny
は、今では、上記の文脈を考えると...
不可解ですので、質問がためです文字はPythonでエスケープする必要があり、Perlではどの文字を使用しますか? PerlとPythonの正規表現はそれと同等の権利はありませんか? PerlやPythonの両方で
すべての生の文字列を使用しています。バックスラッシュはリテラルです。 – TigerhawkT3
これを確認してください:http://stackoverflow.com/questions/7063420/perl-compatible-regular-expression-pcre-in-python – MYGz
Perlバージョンでもバックスラッシュは必要ありません。 – Borodin