IOB format - liczenie ilości zdań i tokenów w zdaniach

0

Hej,

mam plik w formacie .iob gdzie jest:

Tak	adv:pos	B-VP	O	O
było	praet:sg:n:imperf	I-VP	O	B-HEAD-VP
w	prep:loc:nwok	B-NP	B-AGP	O
przypadku	subst:sg:loc:m3	I-NP	I-AGP	O
krzyża	subst:sg:gen:m3	I-NP	I-AGP	B-HEAD-AGP#B-HEAD-NP
i	conj	O	O	O
jest	fin:sg:ter:imperf	B-VP	O	B-HEAD-VP
w	prep:loc:nwok	B-NP	B-AGP	O
każdej	adj:sg:loc:f:pos	I-NP	I-AGP	B-HEAD-AGP#B-HEAD-NP
innej	adj:sg:loc:f:pos	I-NP	I-AGP	O
”	interp	O	O	O
.	interp	O	O	O

Do	prep:gen	B-NP	B-AGP	O
naszej	adj:sg:gen:f:pos	I-NP	I-AGP	O
redakcji	subst:sg:gen:f	I-NP	I-AGP	B-HEAD-AGP#B-HEAD-NP
zadzwonił	praet:sg:m1:perf	B-VP	O	B-HEAD-VP
zbulwersowany	ppas:sg:nom:m1:perf:aff	B-NP	B-AGP	O
Czytelnik	subst:sg:nom:m1	I-NP	I-AGP	B-HEAD-AGP#B-HEAD-NP
.	interp	O	O	O

Każde zdanie jest oddzielone pustą linią.
Ilość zdań w całym pliku zliczam po pustych liniach:

ilosc_zdan = 0

with open('test.iob') as infp:
    for line in infp:
        if not line.strip():
            ilosc_zdan += 1

print('ilość zdań: %d' % ilosc_zdan)

Jak zliczyć ilość wyrazów/tokenów w każdym zdaniu i dodać to do data frejma gdzie kolejne zdanie (numery) będą indeksami ?

Ilość tokenów w całym zbiorze zliczam tak:
data_3 to już lista krotek gdzie każda linia jest krotką.

rows_token = []

for data in data_3:
    for token in data:
        rows_token.append(token[0])

df_token = pd.DataFrame(rows_token, columns=['token'])
#df_token.head(20)
count_token = {"Token":df_token['token'].count()}


print(count_token)
0

Mam tak:

slowa_w_zdaniu=[]

with open('test.iob') as infp:
    temp=0
    for line in infp:
        if line.strip():
            temp+=1
        else:
            slowa_w_zdaniu.append(temp)
            temp=0
print(slowa_w_zdaniu

ale może da się lepiej?

0

Hmm... Jeśli dobrze rozumiem - tak naprawdę chcesz policzyć ile jest niepustych wierszy w każdej grupie ?

from itertools import groupby

[ sum(g) for i, g in groupby([x.strip() != "" for x in infp]) if i>0 ]

Ale nie sądzę żeby to było czytelniejsze niż Twój kod ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1