Skip to content

Fixing bug related to incorrect base forms

Grzegorz Kostkowski requested to merge ann_base_bug into develop

Zmiana naprawia buga powodującego niepoprawne przypisanie formy bazowej (domyślnie właściwość mwe_base). Problem występował, gdy:

  1. w słowniku WCCL istniały dwa terminy, takie, że jednen zawierał się w drugim (np. "tenis stołowy" i "tenis")
  2. token dłuższego wyr. był ostatnim tokenem w zdaniu

Przykład ilustrujący poprawne oraz niepoprawne (drugie zdanie) działanie:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE chunkList SYSTEM "ccl.dtd">
<chunkList>
 <chunk id="ch1">
  <sentence id="s1">
   <tok>
    <orth>plac</orth>
    <lex disamb="1"><base>plac</base><ctag>subst:sg:nom:m3</ctag></lex>
    <ann chan="mwe">1</ann>
    <prop key="mwe_base">plac zabaw</prop>
   </tok>
   <tok>
    <orth>zabaw</orth>
    <lex disamb="1"><base>zabawa</base><ctag>subst:pl:gen:f</ctag></lex>
    <ann chan="mwe">1</ann>
   </tok>
   <tok>
    <orth>i</orth>
    <lex disamb="1"><base>i</base><ctag>conj</ctag></lex>
    <ann chan="mwe">0</ann>
   </tok>
   <tok>
    <orth>tenis</orth>
    <lex disamb="1"><base>tenis</base><ctag>subst:sg:acc:m3</ctag></lex>
    <ann chan="mwe">2</ann>
    <prop key="mwe_base">tenis stołowy</prop>
   </tok>
   <tok>
    <orth>stołowy</orth>
    <lex disamb="1"><base>stołowy</base><ctag>adj:sg:acc:m3:pos</ctag></lex>
    <ann chan="mwe">2</ann>
   </tok>
   <ns/>
   <tok>
    <orth>.</orth>
    <lex disamb="1"><base>.</base><ctag>interp</ctag></lex>
    <ann chan="mwe">0</ann>
   </tok>
  </sentence>
 </chunk>
 <chunk id="ch2">
  <sentence id="s2">
   <tok>
    <orth>plac</orth>
    <lex disamb="1"><base>plac</base><ctag>subst:sg:nom:m3</ctag></lex>
    <ann chan="mwe">1</ann>
    <prop key="mwe_base">plac zabaw</prop>
   </tok>
   <tok>
    <orth>zabaw</orth>
    <lex disamb="1"><base>zabawa</base><ctag>subst:pl:gen:f</ctag></lex>
    <ann chan="mwe">1</ann>
   </tok>
   <tok>
    <orth>i</orth>
    <lex disamb="1"><base>i</base><ctag>conj</ctag></lex>
    <ann chan="mwe">0</ann>
   </tok>
   <tok>
    <orth>tenis</orth>
    <lex disamb="1"><base>tenis</base><ctag>subst:sg:acc:m3</ctag></lex>
    <ann chan="mwe">2</ann>
    <prop key="mwe_base">tenis</prop>
   </tok>
   <tok>
    <orth>stołowy</orth>
    <lex disamb="1"><base>stołowy</base><ctag>adj:sg:acc:m3:pos</ctag></lex>
    <ann chan="mwe">2</ann>
   </tok>
  </sentence>
 </chunk>

Podczas analizy działania okazało się, że po oznaczeniu tokenów anotacją (w kanale anotacji), przy ponownej iteracji z krótszym terminem następowało nadpisanie poprawnej dłuższej formy bazowej krótszą.

W celu naprawy problemu dodano warunek uniemożliwiający przypisanie krótszej formy bazowej (jeśli jest już jakaś przypisana, w przeciwnym wypadku get_attribute zwraca pusty string).

Test (manualny) weryfikujący poprawność działania dla powyższego przykładowego CCLa został przygotowany i dodany do repozytorium corpus2mwe (commit 769bca3e).

Merge request reports