2014-09-30 92 views
0

進出口新的Python可能有人幫助我如何能給出這樣的字符串列表創建一個正規表示法:使用正則表達式保留形容詞的名稱/名稱label-id?

test_string = "pero pero CC 
    tan tan RG 
    antigua antiguo AQ0FS0 
    que que CS 
    según según SPS00 
    mi mi DP1CSS 
    madre madre NCFS000" 

如何回報這樣的地方NCFS00表示女性名詞和AQ0FS0元組表示女性的形容詞(西班牙語),形態順序很重要,因爲他們必須符合如下例:

> ([madre, NCFS00],[antigua, AQ0FS0]) 

我想給定test_string當且僅當他們有it's相關標籤返回的字形容詞,名詞形態發生(例如[Noun, NCFS00],[Adjective, AQ0FS0]),這是我做什麼:

# -- coding: utf-8 -- 
import re 


#str = "pero pero CC " \ 
    "tan tan RG " \ 
    "antigua antiguo AQ0FS0" \ 
    "que que CS " \ 
    "según según SPS00 " \ 
    "mi mi DP1CSS " \ 
    "madre madre NCFS000" 

tupla1 = re.findall(r'(\w+)\s\w+\s(AQ0FS0)', str) 
print tupla1 

tupla2 = re.findall(r'(\w+)\s\w+\s(NCFS00)',str) 
print tupla2 

輸出如下:

[( '安提瓜', 'AQ0FS0')] [( '馬德雷', 'NCFS00')]

這個輸出的問題是,如果我通過它很長test_string我需要保留標籤的「順序」或「發生」(即我只能打印一個元組,當且僅當它們具有以下順序時:AQ0FS0和NCFS000在詞語中:女性形容詞,女性名詞)。

例如,如果我通過這樣的字符串:

str = ''' Hola hola I 1 
compis compis NCMS000 0.500006 
! ! Fat 1 

No no RN 0.998045 
sabía saber VMII3S0 0.592869 
como como CS 0.999289 
se se P00CN000 0.465639 
ponía poner VMII3S0 0.65 
una uno DI0FS0 0.951575 
lavadora lavadora NCFS000 0.414738 
hasta hasta SPS00 0.957698 
que que PR0CN000 0.562517 
conocí conocer VMIS1S0 1 
esta este DD0FS0 0.986779 
y y CC 0.999962 
es ser VSIP3S0 1 
que que CS 0.437483 
es ser VSIP3S0 1 
muy muy RG 1 
sencilla sencillo AQ0FS0 1 
de de SPS00 0.999984 
utilizar utilizar VMN0000 1 
! ! Fat 1 

Todo todo DI0MS0 0.560961 
un uno DI0MS0 0.987295 
gustazo gustazo NCMS000 1 
cuando cuando CS 0.985595 
estamos estar VAIP1P0 1 
aprendiendo aprender VMG0000 1 
para para SPS00 0.999103 
emancipar emancipar VMN0000 1 
nos nos PP1CP000 1 
, , Fc 1 
que que CS 0.437483 
si si CS 0.99954 
nos nos PP1CP000 0.935743 
ponen poner VMIP3P0 1 
facilidad facilidad NCFS000 1 
con con SPS00 1 
las el DA0FP0 0.970954 
tareas tarea NCFP000 1 
de de SPS00 0.999984 
la el DA0FS0 0.972269 
casa casa NCFS000 0.979058 
pues pues CS 0.998047 
mejor mejor AQ0CS0 0.873665 
que que PR0CN000 0.562517 
mejor mejor AQ0CS0 0.873665 
. . Fp 1 

Antes_de antes_de SPS00 1 
esta este PD0FS000 0.0132212 
teníamos tener VMII1P0 1 
otra otro DI0FS0 0.803899 
de de SPS00 0.999984 
la el DA0FS0 0.972269 
marca marca NCFS000 0.972603 
Otsein otsein NP00000 1 
, , Fc 1 
de de SPS00 0.999984 
estas este DD0FP0 0.97043 
que que PR0CN000 0.562517 
van ir VMIP3P0 1 
incluidas incluir VMP00PF 1 
en en SPS00 1 
el el DA0MS0 1 
mobiliario mobiliario NCMS000 0.476077 
y y CC 0.999962 
además además RG 1 
era ser VSII1S0 0.491262 
de de SPS00 0.999984 
carga carga NCFS000 0.952569 
superior superior AQ0CS0 0.992424 
, , Fc 1 
pero pero CC 0.999764 
tan tan RG 1 
antigua antiguo AQ0FS0 0.953488 
que que CS 0.437483 
según según SPS00 0.995943 
mi mi DP1CSS 0.999101 
madre madre NCFS000 1 
, , Fc 1 
nadie nadie PI0CS000 1 
la lo PP3FSA00 0.0277039 
podía poder VMII3S0 0.63125 
tocar tocar VMN0000 1 
porque porque CS 1 
solo solo RG 0.0472103 
la lo PP3FSA00 0.0277039 
entendía entender VMII3S0 0.65 
ella él PP3FS000 1 
. . Fp 1 

Esta este PD0FS000 0.0132212 
es ser VSIP3S0 1 
de de SPS00 0.999984 
la el DA0FS0 0.972269 
marca marca NCFS000 0.972603 
Aeg aeg NP00000 1 
y y CC 0.999962 
dentro_de dentro_de SPS00 1 
este este DD0MS0 0.960092 
tipo tipo NCMS000 1 
de de SPS00 0.999984 
lavadoras lavadora NCFP000 0.411969 
de de SPS00 0.999984 
esta este DD0FS0 0.986779 
marca marca NCFS000 0.972603 
las lo PP3FPA00 0.0289466 
había haber VAII1S0 0.353863 
más más RG 1 
caras caro AQ0FP0 0.417273 
o o CC 0.999769 
más más RG 1 
baratas barato AQ0FP0 0.3573 
y y CC 0.999962 
está estar VAIP3S0 0.999201 
digamos decir VMSP1P0 0.785925 
que que CS 0.437483 
está estar VAIP3S0 0.999201 
en en SPS00 1 
el el DA0MS0 1 
punto punto NCMS000 1 
medio medio AQ0MS0 0.314286 
. . Fp 1 

Es ser VSIP3S0 1 
de de SPS00 0.999984 
color color NCMS000 1 
blanco blanco AQ0MS0 0.598684 
y y CC 0.999962 
tiene tener VMIP3S0 1 
carga carga NCFS000 0.952569 
frontal frontal AQ0CS0 0.657209 
, , Fc 1 
con con SPS00 1 
una uno DI0FS0 0.951575 
capacidad capacidad NCFS000 1 
de de SPS00 0.999984 
6kg 6kg Z 1 
. . Fp 1 

En en SPS00 1 
casa casa NCFS000 0.979058 
a_pesar_de a_pesar_de SPS00 1 
ser ser VSN0000 0.940705 
cuatro 4 Z 1 
, , Fc 1 
se se P00CN000 0.465639 
ponen poner VMIP3P0 1 
lavadoras lavadora NCFP000 0.411969 
casi casi RG 1 
todos todo DI0MP0 0.624221 
o o CC 0.999769 
todos todo DI0MP0 0.624221 
los el DA0MP0 0.976481 
días día NCMP000 1 
. . Fp 1 

En en SPS00 1 
su su DP3CS0 1 
parte parte NCFS000 0.499183 
de de SPS00 0.999984 
arriba arriba RG 0.986014 
encontramos encontrar VMIP1P0 0.65 
la el DA0FS0 0.972269 
" " Fe 1 
; ; Fx 1 
zona zona NCFS000 1 
de de SPS00 0.999984 
mandos mando NCMP000 1 
" " Fe 1 
; ; Fx 1 
, , Fc 1 
donde donde PR000000 0.967437 
se se P00CN000 0.465639 
puede poder VMIP3S0 0.999117 
echar echar VMN0000 1 
el el DA0MS0 1 
detergente detergente NCMS000 0.49273 
, , Fc 1 
aunque aunque CC 1 
en en SPS00 1 
nuestro nuestro DP1MSP 0.94402 
caso caso NCMS000 0.99812 
lo lo PP3CNA00 0.271177 
a a SPS00 1 
el el DA0MS0 1 
ser ser VSN0000 0.940705 
gel gel NCMS000 1 
lo lo PP3CNA00 0.271177 
ponemos poner VMIP1P0 1 
directamente directamente RG 1 
junto_con junto_con SPS00 1 
la el DA0FS0 0.972269 
ropa ropa NCFS000 1 
. . Fp 1 

Luego luego RG 0.996689 
tiene tener VMIP3S0 1 
la el DA0FS0 0.972269 
rueda rueda NCFS000 0.72093 
para para SPS00 0.999103 
elegir elegir VMN0000 1 
el el DA0MS0 1 
programa programa NCMS000 0.953488 
y y CC 0.999962 
los el DA0MP0 0.976481 
intermitentes intermitente NCMP000 0.342773 
que que PR0CN000 0.562517 
indican indicar VMIP3P0 1 
en en SPS00 1 
que que CS 0.437483 
paso paso NCMS000 0.905738 
de de SPS00 1 
el el DA0MS0 1 
programa programa NCMS000 0.953488 
estaba estar VAII1S0 0.5 
. . Fp 1 

Como como CS 0.999289 
todas todo PI0FP000 0.0490506 
tiene tener VMIP3S0 1 
programas programa NCMP000 0.97619 
más más RG 1 
cortos corto AQ0MP0 1 
y y CC 0.999962 
más más RG 1 
largos largo AQ0MP0 0.97619 
, , Fc 1 
incluso incluso RG 0.996383 
un uno DI0MS0 0.987295 
programa programa NCMS000 0.953488 
que que PR0CN000 0.562517 
seria seriar VMIP3S0 0.151546 
como como CS 0.999289 
lavar lavar VMN0000 1 
a a SPS00 0.996023 
mano mano NCFS000 0.992095 
y y CC 0.999962 
otro otro DI0MS0 0.612994 
ideal ideal NCMS000 0.5 
para para SPS00 0.999103 
estores estor NCMP000 1 
, , Fc 1 
que que PR0CN000 0.562517 
salen salir VMIP3P0 0.972603 
casi casi RG 1 
secos seco AQ0MP0 1 
y y CC 0.999962 
planchaditos planchar VMP00PM 0.691767 
para para SPS00 0.999103 
colgar colgar VMN0000 1 
y y CC 0.999962 
ya ya RG 0.999395 
está estar VAIP3S0 0.999201 
. . Fp 1 

Es ser VSIP3S0 1 
muy muy RG 1 
fácil fácil AQ0CS0 1 
de de SPS00 0.999984 
aprender aprender VMN0000 1 
la lo PP3FSA00 1 
y y CC 0.999962 
además además RG 1 
tiene tener VMIP3S0 1 
indicador indicador NCMS000 0.64273 
por por SPS00 1 
sonido sonido NCMS000 1 
de de SPS00 0.999984 
cuando cuando CS 0.985595 
acaba acabar VMIP3S0 0.992958 
, , Fc 1 
lista listar VMIP3S0 0.220088 
para para SPS00 0.999103 
abrir abrir VMN0000 1 
y y CC 0.999962 
tender tender VMN0000 1 
. . Fp 1 

Por por SPS00 1 
decir decir VMN0000 0.997512 
algo algo PI0CS000 0.900246 
malo malo AQ0MS0 0.657087 
de de SPS00 0.999984 
ella él PP3FS000 1 
, , Fc 1 
sería ser VSIC1S0 0.5 
que que CS 0.437483 
cuando cuando CS 0.985595 
centrifuga centrifugar VMIP3S0 0.994859 
, , Fc 1 
algo algo PI0CS000 0.900246 
que que PR0CN000 0.562517 
hace hacer VMIP3S0 1 
muy muy RG 1 
bien bien RG 0.902728 
, , Fc 1 
pues pues CS 0.998047 
vibra vibrar VMIP3S0 0.994856 
un uno DI0MS0 0.987295 
poco poco RG 0.542435 
y y CC 0.999962 
se se P00CN000 0.465639 
nota notar VMIP3S0 0.419995 
el el DA0MS0 1 
ruido ruido NCMS000 1 
jeje jeje NCMS000 0.833445 
, , Fc 1 
pero pero CC 0.999764 
no no RN 0.998134 
se se P00CN000 0.465639 
mueve mover VMIP3S0 0.994868 
de de SPS00 0.999984 
su su DP3CS0 1 
sitio sitio NCMS000 0.980769 
! ! Fat 1 
! ! Fat 1 

Saludillos saludillos NP00000 0.411768 
! ! Fat 1 

''' 

我有以下的輸出:

[('sencilla', 'AQ0FS0'), ('antigua', 'AQ0FS0')] 
[('lavadora', 'NCFS00'), ('facilidad', 'NCFS00'), ('casa', 'NCFS00'), ('marca', 'NCFS00'), ('carga', 'NCFS00'), ('madre', 'NCFS00'), ('marca', 'NCFS00'), ('marca', 'NCFS00'), ('carga', 'NCFS00'), ('capacidad', 'NCFS00'), ('casa', 'NCFS00'), ('parte', 'NCFS00'), ('zona', 'NCFS00'), ('ropa', 'NCFS00'), ('rueda', 'NCFS00'), ('mano', 'NCFS00')] 

其中鴕鳥政策保留以前的名詞,形容詞秩序。

+0

,編輯你原來的問題,使之更加清晰。隔離問題,給一個簡短的例子字符串,清楚地描述和小心地描述你想要的東西。如果你遵循這些建議,你會更快地得到答案(或者在最好的情況下,你會自己找到答案) – 2014-09-30 23:49:08

+0

好的,謝謝@CasimiretHippolyte – 2014-09-30 23:52:02

+0

沒有順序的字符串,只有順序。 'upla = re.findall(r'(\ w +)\ s \ w + \ s(NCFS000 | AQ0FS0)',str)' – sln 2014-10-01 01:29:15

回答

0

在這裏你去(僅供參考 - 我建議你不要使用str作爲變量)如果你想要一個答案

import re 
s = "pero pero CC " \ 
    "tan tan RG " \ 
    "antigua antiguo AQ0FS0" \ 
    "que que CS " \ 
    "según según SPS00 " \ 
    "mi mi DP1CSS " \ 
    "madre madre NCFS000" 

print re.findall(r'([^\s]+) \1 ([^\s]+)', s) 
+0

輸出不保留'名詞,形容詞'標籤順序.. – 2014-09-30 23:50:41

+0

我不承認語言,因此不承認語言部分 - 我遵循您描述的模式。我嚴重懷疑你會使用正則表達式解析部分語言,而沒有廣泛的if/elif塊。 – user590028 2014-10-01 00:56:08

+0

西班牙語,正如我之前所說:'(例如[名詞,NCFS00],[形容詞,AQ0FS0])' – 2014-10-01 00:57:56