2014-12-07 20 views
7

Tôi cần trích xuất tất cả tên thành phố từ một trang web. Tôi đã sử dụng beautifulSoup với RE trong các dự án trước nhưng trên trang web này tên thành phố là một phần của văn bản thông thường và không có định dạng cụ thể. Tôi tìm thấy gói geograpy (https://pypi.python.org/pypi/geograpy/0.3.7) đáp ứng các yêu cầu của tôi."NotImplementedError: Sử dụng nhãn() để truy cập nhãn nút"

Geograpy sử dụng gói nltk. Tôi đã cài đặt tất cả các mô hình và các gói cho NLTK nhưng nó vẫn không ngừng ném lỗi này:

>>> import geograpy 
>>> places = geograpy.get_place_context(url="http://www.state.gov/misc/list/") 

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "C:\Python27\lib\site-packages\geograpy\__init__.py", line 6, in get_place_context 
e.find_entities() 
File "C:\Python27\lib\site-packages\geograpy\extraction.py", line 31, in find_entities 
if (ne.node == 'GPE' or ne.node == 'PERSON') and ne[0][1] == 'NNP': 
File "C:\Python27\lib\site-packages\nltk\tree.py", line 198, in _get_node 
raise NotImplementedError("Use label() to access a nod label.") 
NotImplementedError: Use label() to access a node label. 

Bất kỳ trợ giúp sẽ được đánh giá

Trả lời

2

Dường như geograpy đang kêu gọi các phương pháp node của một đối tượng nltkTree:

nes = nltk.ne_chunk(nltk.pos_tag(text)) 
for ne in nes: 
    if len(ne) == 1: 
     if (ne.node == 'GPE' or ne.node == 'PERSON') and ne[0][1] == 'NNP': 

gói nltk đã đánh dấu là không dùng nữa:

def _get_node(self): 
    """Outdated method to access the node value; use the label() method instead.""" 
    raise NotImplementedError("Use label() to access a node label.") 
def _set_node(self, value): 
    """Outdated method to set the node value; use the set_label() method instead.""" 
    raise NotImplementedError("Use set_label() method to set a node label.") 
node = property(_get_node, _set_node) 

Gói bị hỏng. Bạn có thể tự khắc phục hoặc sử dụng một phiên bản khác.

+0

Cảm ơn câu trả lời. Tôi đã tự tìm ra điều này. Tôi đã thực sự hy vọng rằng ai đó sẽ giúp tôi trong 'sửa chữa' gói này. Có thể là một người có kinh nghiệm với nltk. Đối với việc sử dụng một gói khác nhau, tôi đã tìm kiếm một gói tương tự cho ngày nhưng chưa tìm thấy bất kỳ điều nào. – Faisal

13

Bạn có thể giải quyết điều này bằng cách thay thế ".node" bằng ".label()".

Trong bạn vấn đề, bạn có thể thử thay thế

if (ne.node == 'GPE' or ne.node == 'PERSON') and ne[0][1] == 'NNP': 

với

if (ne.label() == 'GPE' or ne.label() == 'PERSON') and ne[0][1] == 'NNP': 
+0

Có thể bạn có thể mở rộng câu trả lời của mình một chút bằng cách nói lý do tại sao điều đó là cần thiết. Ví dụ: có thay đổi trong API không? –

4

Đừng cho rằng tất cả mọi người chỉnh sửa file lib. Đối với người hoặc bất kỳ ai cần trợ giúp, bạn sẽ cần phải truy cập nơi gói được cài đặt. Bạn muốn sửa đổi exploit.py. Nếu bạn đang sử dụng Windows 10 hoặc một cái gì đó tương tự, tập tin có thể nằm trong C: \ Python27 \ Lib \ site-packages \ geograpy \ extraction.py. Nó thường nằm trong cùng thư mục cài đặt như python. Như người khác đã đề cập trước đó, thay đổi (Dòng 31)

nếu (ne.node == 'GPE' hoặc ne.node == 'PERSON') và ne [0] [1] == 'NNP':

để

if (ne.label() == 'GPE' hoặc ne.label() == 'NGƯỜI') và ne [0] [1] == 'NNP':

Làm xong. Happy Coding.