2011-03-30 46 views
6

Có cách nào để nắm bắt các hạn chế lựa chọn của WordNet (chẳng hạn như + animate, + con người, v.v.) từ synsets thông qua NLTK không? Hoặc có cách nào khác để cung cấp thông tin ngữ nghĩa về đồng bộ không? Gần nhất tôi có thể nhận được nó là quan hệ hypernym.Hạn chế lựa chọn Wordnet trong NLTK

Trả lời

4

Nó phụ thuộc vào những gì là của bạn "hạn chế selectional" hoặc tôi sẽ gọi nó là đặc trưng ngữ nghĩa, bởi vì trong ngữ nghĩa cổ điển, có tồn tại một thế giới của concepts và để so sánh giữa các khái niệm chúng ta phải tìm

  • phân biệt đối xử tính năng (tức là tính năng của các khái niệm được sử dụng để phân biệt với nhau) và
  • tính năng tương tự (tức là tính năng của các khái niệm tương tự và nhấn mạnh sự cần thiết phải phân biệt chúng)

Ví dụ:

Man is [+HUMAN], [+MALE], [+ADULT] 
Woman is [+HUMAN], [-MALE], [+ADULT] 

[+HUMAN] and [+ADULT] = similarity features 
[+-MALE] is the discrimating features 

Các vấn đề thường gặp của ngữ nghĩa truyền thống và áp dụng lý thuyết này trong ngữ nghĩa tính toán là câu hỏi của

"Có một danh sách cụ thể các tính năng mà chúng ta có thể sử dụng để so sánh bất kỳ

"Nếu có, các tính năng trong danh sách này là gì?" khái niệm? "

(thấy www.acl.ldc.upenn.edu/E/E91/E91-1034.pdf để biết thêm chi tiết)

Bắt trở lại WordNet, tôi có thể đề nghị 2 phương pháp để giải quyết " giới hạn lựa chọn "

Đầu tiên, Kiểm tra các siêu từ đối với các đối tượng phân biệt đối xử, nhưng trước tiên bạn phải quyết định các tính năng phân biệt đối xử là gì. Để phân biệt một con vật với con người, chúng ta hãy xem xét các tính năng phân biệt đối xử như [+ -human] và [+ -animal].

from nltk.corpus import wordnet as wn 

# Concepts to compare 
dog_sense = wn.synsets('dog')[0] # It's http://goo.gl/b9sg9X 
jb_sense = wn.synsets('James_Baldwin')[0] # It's http://goo.gl/CQQIG9 

# To access the hypernym_paths()[0] 
# It's weird for that hypernym_paths gives a list of list rather than a list, nevertheless it works. 
dog_hypernyms = dog_sense.hypernym_paths()[0] 
jb_hypernyms = jb_sense.hypernym_paths()[0] 


# Discriminating features in terms of concepts in WordNet 
human = wn.synset('person.n.01') # i.e. [+human] 
animal = wn.synset('animal.n.01') # i.e. [+animal] 

try: 
    assert human in jb_hypernyms and animal not in jb_hypernyms 
    print "James Baldwin is human" 
except: 
    print "James Baldwin is not human" 

try: 
    assert human in dog_hypernyms and animal not in dog_hypernyms 
    print "Dog is an animal" 
except: 
    print "Dog is not an animal" 

Thứ hai, Kiểm tra các biện pháp tương tự như @Jacob đã đề xuất.

dog_sense = wn.synsets('dog')[0] # It's http://goo.gl/b9sg9X 
jb_sense = wn.synsets('James_Baldwin')[0] # It's http://goo.gl/CQQIG9 

# Features to check against whether the 'dubious' concept is a human or an animal 
human = wn.synset('person.n.01') # i.e. [+human] 
animal = wn.synset('animal.n.01') # i.e. [+animal] 

if dog_sense.wup_similarity(animal) > dog_sense.wup_similarity(human): 
    print "Dog is more of an animal than human" 
elif dog_sense.wup_similarity(animal) < dog_sense.wup_similarity(human): 
    print "Dog is more of a human than animal" 
+0

Cảm ơn bạn đã trả lời kỹ lưỡng. Tôi nhận ra một lúc trước, tôi không thể tìm thấy các tính năng tương tự/phân biệt đối xử trong WordNet do những lý do bạn đã đề cập. – erickrf

0

Bạn có thể thử sử dụng một số chức năng tương tự với các bộ đồng bộ được lựa chọn cẩn thận và sử dụng chức năng đó để lọc. Nhưng về cơ bản nó giống như sau cây hypernym - afaik tất cả các chức năng tương tự wordnet sử dụng khoảng cách hypernym trong tính toán của chúng. Ngoài ra, có rất nhiều thuộc tính tùy chọn của một tập hợp có thể đáng khám phá, nhưng sự hiện diện của chúng có thể rất không nhất quán.

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