1

引用の長さや引用内の文の数に関係なく、引用を含むすべての文を一致させようとしています。

Alfe が指摘しているように、完璧な正規表現を取得することはおそらく実行可能ではありませんが、可能であれば使用している正規表現を改善したいと考えています。

現在、引用を見つけるためにこれを行っています:

def split_by_quotes(text):
    pattern = r'([A-Z].*?\".*?\".*?\.)'
    quotes = re.findall(pattern, text)
    return(quotes)

しかし、引用が文に表示されていることを確認してから、その文全体をキャプチャしたいと考えています。

文とは、次のようなテキストを意味します。

  1. 通常、前にスペースがあります
  2. 大文字または引用符で始まる
  3. のいずれかで終わります。また !また ?または (直接 " または ' が続く場合もあります)
  4. 通常、スペースが続きます

Alfe が指摘するように、これですべての文がキャプチャされるわけではありませんが、その条件で一致できれば十分です。

例えば:

「これは引用符です。一致する必要があります」

これは、複数のキャリッジ リターンの後の新しい行に引用符がないテキストです。一致する必要はありません。

より複雑な例:

チャールズ・バベッジは次のように述べています。私は、そのような疑問を引き起こす可能性のある考えの混乱の種類を正しく理解することができません。」

その文全体が一致します。

しかし、

彼らはガーフィールドからガーフィールドとロルキャッツを差し引いたものと呼んだが、ジョンソンが誰かが転んで、キーボードを持った猫によって「ステージ外で演奏される」という特に陽気なクリップだと彼が考えたものを見たとき、彼の友人たちはそれが不自由だと思った. 「私は、これは大物になるだろうと言った」と彼は言う。

次のように一致します。

彼らはガーフィールドからガーフィールドとロルキャッツを差し引いたものと呼んだが、ジョンソンが誰かが転んで、キーボードを持った猫によって「ステージ外で演奏される」という特に陽気なクリップだと彼が考えたものを見たとき、彼の友人たちはそれが不自由だと思った.

「私は、これは大物になるだろうと言った」と彼は言う。

4

3 に答える 3

1

あなたがやりたいことは、正規表現ではできないと思います。

自然言語は複雑なものであり、書かれたものでさえ見た目ほど簡単ではありません。私の結論の根拠となる特殊なケースを明確にするために、指摘したいことがいくつかあります。

彼は着陸しました — どきどき!— 地面に。


「やめて!」彼は叫んだ。


500万人が死亡した。

これらの例が自然言語の文の純粋な正規表現とどのように一致するかはわかりません。

編集:

コンピューターがこれら 2 つのケースを区別することはほぼ不可能です。

その後、彼は「二度と!」と言いました。それから彼は部屋を出ました。


彼はテーブルを叩き、「もう二度と!」と言いました。ピーターはそう言って部屋を出て行った。

文字レベルでは、どちらもまったく同じ種類 (引用符の後の大文字など) に見えますが、最初の文は 2 つの文に、2 番目の文は 1 つの文に解析する必要があります。両方のケースが異なることを理解するのは、人間のような知性にかかっています。テクニカル文字はこれを表示しません。

于 2013-11-14T15:09:50.743 に答える
1

これは役に立ちますか?

最初の回答を編集したことに注意してください。これは、その中の正規表現がすべての文に一致していたためであり、引用符が付いている文には一致していませんでした。
Alve の発言も考慮します。正規表現によってキャッチされる文は、大文字だけで始まるのではなく、ドットの後の最初の文字だけで始まります。空白または追加のドットの\r可能n性は別として

import re
regx = re.compile('(?!\Z)'
                  '[. \n\r]*'
                  '('
                    '(?:[^."]*"[^"]*")+'
                    '[^."]*'
                    '(?:\.|\Z)'
                  ')')

s = ('''\nThe "some.rutu"  and "oula oulah, poto."  are '''
     '''all good. A "bi'didi."  is not.  I '''
     """don't know why... 5 "million" people """
     """died . \nAnd here's a sentence without """
     """a quote. "Halt!" he shouted. 'Sunny """
     """days and "nights"'  is a strange phrase""")
print s
print
for el in regx.findall(s):
    print '- %s' % el

結果

The "some.rutu"  and "oula oulah, poto."  are all good. A "bi'didi."  is not.  I don't know why... 5 "million" people died . 
And here's a sentence without a quote. "Halt!" he shouted. 'Sunny days and "nights"'  is a strange phrase

- The "some.rutu"  and "oula oulah, poto."  are all good.
- A "bi'didi."  is not.
- 5 "million" people died .
- "Halt!" he shouted.
- 'Sunny days and "nights"'  is a strange phrase
于 2013-11-14T15:50:24.933 に答える
0

このパターンはルビーでうまくいきました。r'' に変換すれば、Python で問題なく動作するはずです。

/([a-zA-Z,\' ]+\"[^.]+\.)/

エリオット

于 2013-11-14T14:14:28.250 に答える