субота, 22. децембар 2012.

Са регуларним изразима - стање редовно

Иако ова тема донекле задире у "тамну страну" и више је својствена програмерима, може да користи свима који се сусрећу у свом преводилачком раду са текстом који садржи већи број тзв. регуларних израза (енг. regular expressions, regexp, regex). Овај чланак је наставак претходног о раду на сложеним пројектима.

Пре него што пређемо на конкретне примере употребе регуларних израза, даћу вам неколико примера ситуација у којима знање писања истих може да вам донесе велику уштеду времена и да умањи ризик од грешке.

- шифре производа (у брошурама одређене компаније, нпр. АБ123Ц3, АЦ234У8, ДД889А1...),
- бројеви телефона, факса (00381 11 555 6667, итд, где постоји утврђени формат)
- интернет адресе
- имејл адресе
- итд.

У прошлом примеру смо урадили следеће: направили смо виртуелни документ састављен од свих мањих докумената у пројекту - при чему смо већ преведене сегменте закључали и у опцији Create view (Креирај приказ) одабрали опцију једноставног спајања докумената, али без закључаних сегмената.


Када је приказ креиран, отворићемо га као и било који други документ. Будући да смо већ у претходном чланку видели да документи садрже велики број шифара производа, следећи корак је да исте претворимо у тагове.

Из траке са алатима одаберите опцију Format (Формат), а у оквиру ње опцију Run Regex Tagger... (Покрени конвертор регуларних израза у тагове...).


Појављује се следећи прозор:


У поље Regular expression (на слици уоквирено црвеном бојом), уносимо формулу према којој ће сви изрази који задовољавају задате вредности бити претворени у тагове. У нашем случају, желимо да конвертујемо све шифре производа који прате следећи шаблон: 6 бројева, 3 словна места, 1 број, као у примеру са слике у наставку (083891COM5, 088111COM5, 083772COM5, итд.):


Формула ће изгледати овако:

\d{6}[A-Za-z]{3}\d

при чему је значење сваког од елемената формуле следеће:

\d - број (0-9)
{num} - број понављања ставке која претходи ИЛИ опсег (нпр. {3} значи 3 цифре, док {2,4} значи 2, 3 или 4 цифре)
[A-Za-z] - било које слово (велико или мало)


Када сте унели формулу у горе означено поље, кликните на дугме Add (Додај). Правило (тј. формула) ће се појавити у пољу Rules (Правила). У пољу Results (Резултати), црвеном бојом су обележени сви регуларни изрази које ће унесена формула претворити у тагове. У случају да нисте задовољни резултатом (догађа се да нисте добро унели формулу или сте превидели неку вредност), већ унесену формулу можете кориговати у пољу Regular expression и притиснути на дугме Change (Измени). Ако се међу правилима налази више формула, одаберите ону коју желите да измените, па тек онда вршите измене.

Ако сте задовољни резултатом, дата правила можете снимити кликом на зелени крстић у горњем десном углу (отвориће се прозор за конфигурацију филтера - унесите назив који ће вас асоцирати на формуле за будућу употребу) и притисните дугме у доњем углу прозора - Run tagger now.


Промене у прозору за превођење су следеће:


Додатни разлог за конвертовање регуларних израза је и тај што проценат поклапања са резултатима из преводилачке меморије може бити много већи него у случају да је израз остао неконвертован у таг. На пример, ако сте раније превели nozzle у сегменту у коме није било тагова, memoQ ће вам у нашем сегменту (сегмент 28. на слици) предложити решење чији ће проценат поклапања бити преко 90% (вероватно од 97% до 99%). Да је израз остао неконвертован, проценат поклапања би био испод 50% или отприлике у том делу спектра поклапања јер би memoQ на сам израз гледао као на једну реч и десет карактера (самим тим, не би ни понудио решење из меморије ако сте у подешавањима подесили доњи праг на 70% и сл.).

Имејл адресе

Ако више не желите да имате посла са имејл адресама у било ком формату оне биле, онда унесите следећу формулу у конвертор регуларних израза:

\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b

У овом примеру, учитао сам могуће (али и погрешне) имејл адресе на различитим доменима (укључујући и погрешне домене са доњом цртицом "_"), учитао их у програм и написао горњу формулу. Погледајте примере адреса:


Дакле, свака имејл адреса има следећи шаблон: одређени број карактера (словних или бројчаних вредности, симбола, итд.) између којих нема размака, симбол "@", одређени број карактера, тачку и од два до четири словна места (нпр. .rs, .com, .info, .uk.com).

Погледајмо још једном горњу формулу, овога пута разложену на сваку од категорија наведених у претходном пасусу:

\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b

\b - овај метакарактер се користи за претрагу само целих низова. То значи да се john из (погрешне адресе) john doe@john-doe.com, неће сматрати делом низа јер је одвојен размаком.

Низ који се налази између угластих заграда говори да се на датом месту могу наћи сва велика и мала слова, бројеви од 0 до 9, као и знакови: тачка, доња црта, знак за проценат, плус и цртица.

Тачка означава било који карактер (слово, број, симбол), али ако се испред тачке стави коса црта "\", онда то једноставно значи тачку. Дата коса црта (енг. "escape" character, modifier) заправо означава да је знак који следи само тај знак и ништа више (изузеци су број (\d), размак (\s), цела реч (\w или \b)). На пример, "\/" значи "/", "\@" значи "@", "\+" значи "+", итд.

Остатак формуле би требало да буде јасан.

А сада да видимо резултате горње формуле на делу:


Програм је правилно протумачио правило и претворио исправне имејл адресе у тагове, док је у случају неисправних адреса извршио претварање у таг само исправног дела или је прескочио целокупан низ.

На мрежи постоји велики број сајтова посвећених регуларним изразима, ако баш желите да се упуштате у целокупну проблематику. За почетак, довољно је да се упознате са основама. Неке од најчешће коришћених метакарактера, као и њихово значење, објављујем у следећем чланку.

Нема коментара:

Постави коментар