2013-03-29 17 views
5

Tôi muốn chuyển đổi một loạt các hình vị sản xuất bởi một tokenizer PTB-style:Chuyển đổi một loạt các hình vị đến một câu trong Ruby

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

Đối với một câu:

"The house isn't on fire." 

một cách hợp lý là gì để hoàn thành việc này?

+4

Apostrophe là không phải dấu chấm câu. Ít nhất trong lịch sử, nó đại diện cho một số chữ cái bị bỏ qua, và là một phần của một từ. Nó không có ý nghĩa để chia một từ ở đó. Hơn nữa, làm thế nào bạn sẽ nói khi bạn muốn tham gia một bên 'sách học sinh' hoặc cả hai bên 'cuốn sách của một người'? – sawa

+1

Tôi không chắc chắn nếu bạn đã suy nghĩ thông qua các yêu cầu. Như sawa đã nói, bạn sẽ quyết định cách điều trị các dấu nháy đơn như thế nào? Ngoài ra, bạn sẽ bao giờ sử dụng dấu nháy đơn làm dấu ngoặc kép mở hay đóng? Những ký hiệu này yêu cầu ngữ cảnh để biết cách xử lý chúng. Có vẻ như bạn cần xác định ngữ pháp để quyết định loại thẻ nào có thể/không thể theo một loại mã thông báo khác. – Kelvin

+1

Cách mảng được tạo ra ở địa điểm đầu tiên? Những loại dấu câu nào (hoặc các ký hiệu khác) có thể xuất hiện trong đó? Nếu bạn không giải thích những điều này, làm thế nào bạn có thể mong đợi bất cứ ai trả lời câu hỏi này? – jogojapan

Trả lời

2

Nếu chúng ta lấy @ lời khuyên Sawa về các dấu nháy đơn và làm cho mảng của bạn thế này: (! Với sự hỗ trợ dấu chấm câu)

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

Bạn có thể có được những gì bạn đang tìm kiếm với điều này:

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 
Các vấn đề liên quan