8

むかしむかし、私はこの質問が面白いと感じました。

今日、私はその本のテキストをいじってみることにしました。

このスクリプトで正規表現を使用したいと思います。キリル文字でスクリプトを使用すると、すべてのキリル文字が消去され、句読点と空白だけが残ります。

#!/usr/bin/env python3.2
# coding=UTF-8

import sys, re

for file in sys.argv[1:]:
    f = open(file)
    fs = f.read()
    regexnl = re.compile('[^\s\w.,?!:;-]')
    rstuff = regexnl.sub('', f)
    f.close()
    print(rstuff)

この回答では、非常によく似たことがすでに行われています。

基本的に、アルファベット、英数字、句読点、または空白文字以外の文字セットを指定できるようにしたいだけです。

4

3 に答える 3

11

これはあなたの質問に正確に答えるものではありませんが、regexモジュールは組み込みモジュールよりもはるかに優れたユニコードサポートを備えていreます。たとえば、プロパティとその否定(および他の多数のユニコードプロパティregex)をサポートします。また、Unicodeの大文字と小文字を区別しないように正しく処理します。\p{Cyrillic}\P{Cyrillic}

于 2012-06-11T14:07:19.187 に答える
10

Unicode の範囲は非常に簡単に指定できます: \u0400-\u0500. こちらもご覧ください

以下は、ロシア語のウィキペディアのテキストと、英語のウィキペディアの文にキリル文字が 1 つ含まれている例です。

#coding=utf-8
import re

ru = u"Владивосток находится на одной широте с Сочи, однако имеет среднегодовую температуру почти на 10 градусов ниже."
en = u"Vladivostok (Russian: Владивосток; IPA: [vlədʲɪvɐˈstok] ( listen); Chinese: 海參崴; pinyin: Hǎishēnwǎi) is a city and the administrative center of Primorsky Krai, Russia"

cyril1 = re.findall(u"[\u0400-\u0500]+", en)
cyril2 = re.findall(u"[\u0400-\u0500]+", ru)

for x in cyril1:
    print x

for x in cyril2:
    print x

出力:

Владивосток
------
Владивосток
находится
на
одной
широте
с
Сочи
однако
имеет
среднегодовую
температуру
почти
на
градусов
ниже

添加:

ユニコード範囲を指定するよりも少しハック的ではない方法で動作するはずの他の2つの方法:

  • re.findall("(?u)\w+", text)キリル文字とラテン語の文字に一致する必要があります。
  • re.findall("\w+", text, re.UNICODE)同等です

したがって、より具体的には、あなたの問題について: *re.compile('[^\s\w.,?!:;-], re.UNICODE')トリックを行う必要があります。

こちらをご覧ください(ポイント7)

于 2012-06-11T14:41:11.207 に答える
-2

実用的な理由から、一般的なキリル文字ではなく、正確に現代ロシア語のグリフのサブセットを使用することをお勧めします。これは、ロシアの Web サイトが、ベラルーシ語、ウクライナ語、スラヴ語、マケドニア語のグリフを含む完全なキリル文字のサブセットを使用していないためです。歴史的な理由から、「u\0463」を保持しています。

//ロシアの Web サイトで使用するための基本的な Cyr Unicode 範囲。0401,0406,0410,0411,0412,0413,0414,0415,0416,0417,0418,0419,041A,041B,041C,041D,041E,041F,0420,0421,0422,0423,0424,0425,0426, 0427,0428,0429,042A,042B,042C,042D,042E,042F,0430,0431,0432,0433,0434,0435,0436,0437,0438,0439,043A,043B,043C,043D,043E,043F, 0440,0441,0442,0443,0444,0445,0446,0447,0448,0449,044A,044B,044C,044D,044E,044F,0451,0462,0463

多言語 Web サイトでこのサブセットを使用すると、元の全範囲を使用する場合と比較して帯域幅が 60% 節約され、それに応じてページの読み込み速度が向上します。

于 2014-11-15T12:21:05.693 に答える