2013-03-29 9 views
5

voglio convertire una serie di morfemi prodotti da un PTB-style tokenizzatore:Conversione di un array di morfemi di una frase in Ruby

["The", "house", "is", "n't", "on", "fire", "."] 

Per una frase:

"The house isn't on fire." 

Che è un modo ragionevole per realizzare questo?

+4

Apostrophe è non punteggiatura. Almeno storicamente, rappresenta alcune lettere omesse e fa parte di una parola. Non ha senso dividere una parola lì. Inoltre, come diresti quando vuoi unire i libri degli studenti di una parte o entrambi i lati del libro? – sawa

+1

Non sono sicuro se hai pensato ai requisiti. Come ha detto Sawa, come deciderà come trattare gli apostrofi? Inoltre, utilizzerai mai un apostrofo come virgoletta aperta o chiusa? Questi simboli richiedono il contesto per sapere come trattarli. Sembra che tu abbia bisogno di definire una grammatica per decidere quali tipi di token possono/non possono seguire un altro tipo di token. – Kelvin

+1

Come è stato creato l'array in primo luogo? Quali tipi di simboli di punteggiatura (o altri) possono apparire in esso? Se non spieghi queste cose, come puoi aspettarti che qualcuno risponda a questa domanda? – jogojapan

risposta

2

Se prendiamo @ consiglio di Sawa sulla apostrofo e rendere l'array questo: (! Con il supporto di punteggiatura)

["The", "house", "isn't", "on", "fire", "."] 

È possibile ottenere ciò che il vostro cercando con questo:

def sentence(array) 
    str = "" 
    array.each_with_index do |w, i| 
    case w 
    when '.', '!', '?' #Sentence enders, inserts a space too if there are more words. 
     str << w 
     str << ' ' unless(i == array.length-1) 
    when ',', ';' #Inline separators 
     str << w 
     str << ' ' 
    when '--' #Dash 
     str << ' -- ' 
    else #It's a word 
     str << ' ' unless str[-1] == ' ' || str.length == 0 
     str << w 
    end 
    end 
    str 
end 
Problemi correlati