2009-06-13 25 views
9

Tôi vẫn bị kẹt trong vấn đề cố gắng phân tích các bài viết từ wikipedia. Trên thực tế, tôi muốn phân tích cú pháp phần thông tin của các bài viết từ wikipedia tức là ứng dụng của tôi có tham chiếu đến các quốc gia và trên mỗi trang quốc gia tôi muốn có thể hiển thị hộp thông tin trên bài viết wikipedia tương ứng của quốc gia đó. Tôi đang sử dụng php ở đây - Tôi sẽ đánh giá rất cao nếu bất cứ ai có bất kỳ đoạn mã hoặc lời khuyên về những gì tôi nên làm ở đây.Làm cách nào để lấy thông tin được phân tích cú pháp của một bài viết wikipedia?

Xin cảm ơn một lần nữa.


EDIT

Vâng, tôi có một bảng db với tên của quốc gia. Và tôi có một kịch bản có một quốc gia và thể hiện chi tiết của nó. Tôi muốn lấy các infobox - hộp màu xanh với tất cả các chi tiết hình ảnh quốc gia vv vì nó là từ wikipedia và hiển thị nó trên trang của tôi. Tôi muốn biết một cách thực sự đơn giản và dễ dàng để thực hiện điều đó - hoặc có một kịch bản chỉ tải xuống thông tin của hộp thông tin đến một hệ thống từ xa cục bộ mà tôi có thể truy cập sau này. Ý tôi là tôi mở cửa cho những ý tưởng ở đây - ngoại trừ kết quả cuối cùng tôi muốn là để xem hộp thông tin trên trang của mình - tất nhiên với một chút nội dung của liên kết Wikipedia ở phía dưới :)


EDIT

Tôi nghĩ mình đã tìm thấy thứ mình đang tìm kiếm trên http://infochimps.org - chúng có rất nhiều bộ dữ liệu trong ngôn ngữ YAML. Tôi có thể sử dụng thông tin này ngay lập tức nhưng tôi cần một cách để cập nhật thông tin này từ wikipedia ngay bây giờ và sau đó mặc dù tôi tin rằng infoboxes hiếm khi thay đổi đặc biệt là các quốc gia trừ khi một số quốc gia quyết định thay đổi thành phố thủ đô của họ.

Trả lời

-5

Tôi đề xuất thực hiện WebRequest với wikipedia. Từ đó bạn sẽ có trang và bạn có thể đơn giản phân tích cú pháp hoặc truy vấn dữ liệu bạn cần bằng cách sử dụng regex, thu thập ký tự hoặc một số biểu mẫu khác mà bạn quen thuộc. Về cơ bản một màn hình cạo!

EDIT - Tôi sẽ thêm vào câu trả lời này mà bạn có thể sử dụng HtmlAgilityPack cho những người trong C# land. Đối với PHP, nó trông giống như SimpleHtmlDom. Có nói rằng có vẻ như Wikipedia có API đầy đủ hơn. Câu hỏi này có lẽ là câu trả lời nhu cầu của bạn tốt nhất:

Is there a Wikipedia API?

+1

Đây là một sự lãng phí tài nguyên. –

+0

Xin lỗi - Tôi có thể thấy những gì bạn muốn nói bởi một lượng lớn tài nguyên. Tôi không có ý định cạo trang này mỗi khi có ai đó trên trang web của bạn cần xem xét nó. Tôi sẽ nghĩ rằng bạn sẽ cạo nó ngoại tuyến (nếu bạn chọn làm như vậy) và lưu trữ nó trong một DB địa phương trên các ứng dụng của bạn kết thúc (cách hiệu quả hơn cho tất cả các bên liên quan).Không có nghĩa là để thu hút ngọn lửa! : P –

+0

@Andrew - Tôi mở cho tất cả các khả năng - tuy nhiên tôi không chắc chắn cách bắt đầu. Có bất kỳ loại mã làm việc nào mà tôi có thể xem xét để bắt đầu với điều này không? – Ali

10

tôi đề nghị bạn sử dụng DBPedia thay mà đã thực hiện công việc của biến dữ liệu trong wikipedia vào sử dụng, có thể kết nối, hình thức mở.

+0

Điều này có vẻ rất hứa hẹn - làm cách nào để tôi thực sự sử dụng điều này? – Ali

+0

Có thể bắt đầu tại http://linkeddata.org/tools để tìm con trỏ đến các công cụ dữ liệu được liên kết. Nếu bạn chỉ muốn có dữ liệu, đó là tại khu vực tải xuống DBPedia http://wiki.dbpedia.org/Downloads32 – dajobe

+0

btw dbpedia không thực sự được cập nhật. –

2

Tùy thuộc vào lộ trình bạn muốn đi. Dưới đây là một số khả năng:

  1. Cài đặt MediaWiki với thích hợp sửa đổi. Sau cùng, ứng dụng PHP được thiết kế chính xác để phân tích cú pháp wikitext ...
  2. Tải xuống static HTML version và phân tích các phần bạn muốn.
  3. Sử dụng Wikipedia API với bộ nhớ đệm phù hợp.

KHÔNG chỉ cần nhấn phiên bản mới nhất của trang trực tiếp và làm lại phân tích mỗi lần ứng dụng của bạn muốn hộp. Đây là một nguồn tài nguyên khổng lồ cho cả bạn và Wikimedia.

1

nếu bạn muốn phân tích một thời gian tất cả các bài viết, wikipedia có tất cả các bài viết trong định dạng xml sẵn,

http://en.wikipedia.org/wiki/Wikipedia_database

nếu không bạn có thể sàng lọc cạo bài viết cá nhân ví dụ

+1

Thực ra tôi chỉ muốn lấy thông tin từ – Ali

2

Có một số nhà cung cấp dữ liệu ngữ nghĩa mà từ đó bạn có thể trích xuất dữ liệu có cấu trúc thay vì cố gắng phân tích nó bằng tay:

  • dbpedia - như đã đề cập cung cấp SPARQL endpoint mà có thể được sử dụng cho các truy vấn dữ liệu. Có một số thư viện có sẵn cho nhiều nền tảng, bao gồm cả PHP.

  • Freebase - một nhà cung cấp dữ liệu khác cung cấp dữ liệu. Tập dữ liệu ban đầu dựa trên dữ liệu Wikipedia được phân tích cú pháp, nhưng có một số thông tin được lấy từ các nguồn khác. Tập dữ liệu có thể được chỉnh sửa bởi bất kỳ ai và ngược lại với Wikipedia, bạn có thể thêm dữ liệu của riêng mình vào không gian tên của riêng mình bằng cách sử dụng lược đồ được xác định tùy chỉnh. Sử dụng ngôn ngữ truy vấn riêng của nó được gọi là MQL, dựa trên JSON. Dữ liệu có liên kết WebID trở lại để sửa lỗi các bài viết trên Wikipedia. Cơ sở miễn phí cũng cung cấp số lượng dữ liệu có thể tải xuống. Freebase có số lượng thư viện khách hàng bao gồm PHP.

  • Tên địa lý - cơ sở dữ liệu về vị trí địa lý. Có API cung cấp thông tin Quốc gia và Vùng cho các toạ độ đã cho, các vị trí lân cận (ví dụ: thành phố, ga xe lửa, v.v.)

  • Opensteetmap - bản đồ xây dựng cộng đồng của thế giới. Có API cho phép truy vấn đối tượng theo vị trí và loại.

  • Wikimapia API - một dịch vụ vị trí

14

Tôi muốn sử dụng wikipedia (wikimedia) API. Bạn có thể lấy lại dữ liệu bằng JSON, XML, định dạng gốc php và các định dạng khác. Sau đó, bạn sẽ vẫn cần phân tích cú pháp thông tin được trả về để trích xuất và định dạng thông tin bạn muốn, nhưng hộp thông tin bắt đầu, dừng và thông tin rõ ràng.

Chạy truy vấn của bạn chỉ với rvsection = 0, vì phần đầu tiên này đưa cho bạn tài liệu trước khi ngắt phần đầu tiên, bao gồm cả hộp thông tin. Sau đó, bạn sẽ cần phải phân tích nội dung của hộp thông tin, điều này không quá khó. Xem en.wikipedia.org/w/api.php để biết tài liệu wikipedia api chính thức và www.mediawiki.org/wiki/API để biết hướng dẫn sử dụng.

Run, ví dụ, truy vấn: http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xmlfm&titles=fortran&rvsection=0

+0

Một điều đáng tiếc là dữ liệu của hộp thông tin không được phân tích cú pháp trên đầu trang Bạn chỉ nhận được một chuỗi mà bạn phải phân tích cú pháp chính mình – Julian

+0

Vâng, rất buồn: h ttp: //wikimedia.7.x6.nabble.com/template-parameters-td4998633.html – Vanuan

2

Để tải phần đầu tiên phân tích cú pháp, Chỉ cần thêm tham số này vào cuối url api

rvparse 

Như thế này: http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xmlfm&titles=fortran&rvsection=0&rvparse

Sau đó phân tích cú pháp html để lấy bảng thông tin (sử dụng Regex)

$url = "http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles=Niger&rvsection=0&rvparse"; 
    $data = json_decode(file_get_contents($url), true); 
    $data = current($data['query']['pages']); 
    $regex = '#<\s*?table\b[^>]*>(.*)</table\b[^>]*>#s'; 
    $code = preg_match($regex, $data["revisions"][0]['*'], $matches); 
    echo($matches[0]); 
Các vấn đề liên quan