2013-01-23 24 views
6

Tôi đang cố gắng phát triển một kịch bản Python để kiểm tra mọi câu trong địa chỉ khai mạc thứ hai của Barack Obama và tìm các câu tương tự trong các lễ nhậm chức vừa qua. Tôi đã phát triển một trận đấu mờ rất thô, và tôi hy vọng sẽ cải thiện nó.phát hiện các ám chỉ (ví dụ: các kết quả rất mờ) bằng ngôn ngữ địa chỉ nhậm chức

Tôi bắt đầu bằng cách giảm tất cả các lần nhậm chức vào danh sách các câu không có từ dừng. Sau đó tôi xây dựng một chỉ số tần số.

Tiếp theo, tôi so sánh từng câu trong địa chỉ 2013 của ông Obama cho mỗi câu của mỗi địa chỉ khác, và đánh giá sự tương tự như vậy:

#compare two lemmatized sentences. Assumes stop words already removed. frequencies is dict of frequencies across all inaugural  
def compare(sentA, sentB, frequencies): 
    intersect = [x for x in sentA if x in sentB] 
    N = [frequencies[x] for x in intersect] 
    #calculate sum that weights uncommon words based on frequency inaugurals 
    n = sum([10.0/(x + 1) for x in N]) 
    #ratio of matches to total words in both sentences. (John Adams and William Harrison both favored loooooong sentences that tend to produce matches by sheer probability.) 
    c = float(len(intersect))/(len(sentA) + len(sentB)) 
    return (intersect, N, n, c) 

ngoái, tôi lọc ra kết quả dựa trên cutoffs tùy ý cho n và c .

Nó hoạt động tốt hơn người ta có thể nghĩ, xác định các câu có chung những từ không phổ biến trong một tỷ lệ không đáng kể với tổng số từ.

Ví dụ, nó nhặt những trận đấu:


Obama năm 2013: Đối với lịch sử cho chúng ta biết rằng trong khi những sự thật có thể tự điều hiển nhiên, họ chưa bao giờ được tự thực hiện; rằng trong khi tự do là một món quà từ Thiên Chúa, nó phải được bảo đảm bởi người dân của Ngài ở đây trên trái đất.

Kennedy năm 1961: Với lương tâm tốt chỉ chắc chắn phần thưởng của chúng tôi, với lịch sử quan tòa cuối cùng của hành động của chúng ta, chúng ta hãy đi ra để lãnh đạo đất chúng ta yêu thương, yêu cầu phước lành của Ngài và sự giúp đỡ của Ngài, nhưng khi biết rằng Công việc của Đức Chúa Trời phải thật sự là của chính chúng ta.


Obama năm 2013 Qua máu được vẽ bởi đòn và máu được vẽ bởi gươm, chúng tôi biết rằng không có công đoàn thành lập theo nguyên tắc tự do và bình đẳng có thể tồn tại nửa nô lệ và một nửa-miễn phí.

Lincoln năm 1861 Tuy nhiên, nếu Thiên Chúa muốn rằng nó tiếp tục cho đến khi tất cả sự giàu chất đống bởi của người đầy tớ hai trăm năm mươi năm vất vả không được đáp lại thì bị chìm, và cho đến khi từng giọt máu được vẽ bằng những trận đòn chịu trả khác được vẽ bằng gươm, như đã nói ba ngàn năm trước đây, vì vậy vẫn phải nói "sự phán xét của Chúa là đúng sự thật và công bình hoàn toàn.


Obama năm 2013 thế hệ này Người Mỹ đã được thử nghiệm bởi các cuộc khủng hoảng làm cho quyết tâm của chúng tôi trở nên căng thẳng và được chứng minh khả năng phục hồi của chúng tôi

Kennedy, 1961 Kể từ khi quốc gia này được thành lập, mỗi thế hệ người Mỹ đã được triệu tập để làm chứng cho lòng trung thành của quốc gia.


Nhưng nó rất thô.

Tôi không có sườn cho một dự án học máy chính, nhưng tôi muốn áp dụng thêm lý thuyết nếu có thể.Tôi hiểu tìm kiếm bigram, nhưng tôi không chắc chắn rằng nó sẽ hoạt động ở đây - nó không quá nhiều bigrams chính xác mà chúng tôi quan tâm như là sự gần gũi chung của hai từ được chia sẻ giữa các dấu ngoặc kép. Có một so sánh câu mờ nhìn vào xác suất và phân phối các từ mà không bị quá cứng nhắc không? Bản chất của ám chỉ là nó rất gần đúng.

hiện nỗ lực available on Cloud9IDE

UPDATE, 1/24/13 mỗi câu trả lời được chấp nhận, đây là một chức năng đơn giản Python cho các cửa sổ Bigram:

def bigrams(tokens, blur=1): 
    grams = [] 
    for c in range(len(tokens) - 1): 
     for i in range(c + 1, min(c + blur + 1, len(tokens))): 
      grams.append((tokens[c], tokens[i])) 
    return grams 

Trả lời

2

Nếu bạn đang cảm hứng để sử dụng bigrams, bạn có thể xây dựng bigrams của bạn trong khi cho phép những khoảng trống của một, hai, hoặc thậm chí ba từ để nới lỏng định nghĩa của bigram một chút. Điều này có thể hoạt động vì cho phép các khoảng trống n có nghĩa là thậm chí không n lần nhiều "bigram" và corpus của bạn khá nhỏ. Với ví dụ này, ví dụ: "bigram" từ đoạn đầu tiên của bạn có thể là (similar, inaugurals).

+0

Vâng, đây sẽ là hướng tiếp theo tôi cũng sẽ tham gia. Những gì anh ta nói về là cửa sổ collocational; nhìn vào chúng. Về cơ bản bạn xác định một cửa sổ trượt và thu thập bigrams từ mọi cặp từ trong: "Thế hệ người Mỹ này đã được thử nghiệm": thế hệ này, này, người Mỹ này ... thế hệ, thế hệ người Mỹ. .. v.v. – verbsintransit

+0

Điều đó khiến tôi gần gũi hơn, cảm ơn bạn! Sẽ nối thêm mã cửa sổ bigram (mặc dù nó khá rõ ràng). –

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