2014-09-07 19 views
12

Tôi có một bài thơ và tôi muốn mã Python chỉ in những từ có vần điệu với nhau.Tìm vần bằng cách sử dụng NLTK trong Python

Cho đến nay tôi có thể:

  1. Phá vỡ các câu thơ sử dụng wordpunct_tokenize()
  2. sạch dòng chữ bằng cách loại bỏ các dấu chấm câu
  3. Store từ cuối cùng của mỗi câu của bài thơ trong một danh sách
  4. Tạo danh sách khác bằng cách sử dụng cmudict.entries() với các yếu tố như những từ cuối cùng và cách phát âm của chúng.

Tôi bị kẹt với bước tiếp theo. Làm thế nào tôi nên cố gắng để phù hợp với những phát âm? Tóm lại, nhiệm vụ chính của tôi là tìm ra hai từ có vần điệu hay không. Nếu vần điệu, sau đó trả lại True, khác False.

+0

Vì vậy, câu hỏi của bạn là làm thế nào để tìm thấy nếu 2 chữ vần, sử dụng NLTK? – kender

+0

Có. Các từ có thể đến trong một chuỗi văn bản – learner57

+3

Tôi không nghĩ rằng câu hỏi là vô nghĩa cả. Việc xác định thủ tục vần điệu có thể có nhiều ứng dụng nghiên cứu tiềm năng ... – duhaime

Trả lời

7

Here Tôi tìm thấy một cách để tìm vần để một từ được sử dụng NLTK:

def rhyme(inp, level): 
    entries = nltk.corpus.cmudict.entries() 
    syllables = [(word, syl) for word, syl in entries if word == inp] 
    rhymes = [] 
    for (word, syllable) in syllables: 
      rhymes += [word for word, pron in entries if pron[-level:] == syllable[-level:]] 
    return set(rhymes) 

nơi imp là một từ và level nghĩa như thế nào tốt các vần nên.

Vì vậy, bạn có thể sử dụng chức năng này và để kiểm tra xem 2 chữ vần bạn chỉ có thể kiểm tra nếu có trong thiết lập khác của vần phép:

def doTheyRhyme (word1, word2): 
    # first, we don't want to report 'glue' and 'unglue' as rhyming words 
    # those kind of rhymes are LAME 
    if word1.find (word2) == len(word1) - len (word2): 
     return False 
    if word2.find (word1) == len (word2) - len (word1): 
     return False 

    return word1 in rhyme (word2, 1) 
+0

nó hoạt động cho vần điệu hoàn hảo! nhưng tôi không nhận được thông số cấp. tôi đã thử một số vần điệu không hoàn hảo, ví dụ: "đặt" và "nằm" và một số lượng lớn cho 'cấp' nhưng nó không trả về True. – adrianX

3

Sử dụng metaphone âm thanh hoặc kép để tìm hiểu xem chúng có vần điệu hay không. NLTK dường như không thực hiện những việc này nhưng tìm kiếm nhanh trên Google đã cho thấy một số triển khai.

+1

vần điệu nóng và mũ? Vì đây là một sai lầm rất phổ biến khi sử dụng metaphone. Tôi không nghĩ rằng những thư viện được sử dụng để tìm những từ vần điệu. – RetroCode

Các vấn đề liên quan