2012-02-05 10 views
12

Tôi đang lập kế hoạch để viết một webcrawler cho một dự án NLP, mà đọc trong cấu trúc thread của một diễn đàn mọi lúc trong một khoảng thời gian cụ thể và phân tích từng luồng với nội dung mới. Thông qua các biểu thức chính quy, tác giả, ngày tháng và nội dung của các bài viết mới được trích xuất. Kết quả sau đó được lưu trữ trong cơ sở dữ liệu.Erlang có phải là lựa chọn đúng đắn cho một webcrawler không?

Ngôn ngữ và plattform sử dụng cho việc thu thập thông phải phù hợp với các tiêu chí sau:

  • dễ dàng mở rộng trên nhiều lõi và cpu
  • thích hợp cho tôi cao/O tải
  • nhanh biểu thức chính quy phù hợp với
  • dễ dàng duy trì/vài chi phí hoạt động

Sau một số nghiên cứu tôi nghĩ rằng Erlan g có thể là một ứng cử viên phù hợp, nhưng tôi đọc nó không phải là rất tốt ở chế biến chuỗi (và vì vậy biểu thức phù hợp thường xuyên). Tôi cũng không có bất kỳ sự hết hạn nào về yếu tố bảo trì.

Erlang có phải là công nghệ tốt cho kịch bản được mô tả ở trên không? Và nếu không, điều gì sẽ là một lựa chọn tốt?

+1

Điều này có thể được yêu cầu tốt hơn trên http: //programmers.stackexchange.com; nó rơi dưới "không xây dựng" ở đây IMHO –

+0

Tiêu chí của bạn có ít nhất là nhiều để làm với thiết kế tổng thể và kiến ​​trúc như ngôn ngữ. Bạn có thể xây dựng webcrawlers có thể mở rộng trong Erlang, Python, Java, bất cứ điều gì. Nó cũng phụ thuộc vào kinh nghiệm ngôn ngữ lập trình hiện tại và thời gian của bạn. – DNA

+0

Tôi thực sự muốn sử dụng Erlang cho dự án này bởi vì nó có thể là phù hợp nhất từ ​​những gì tôi đọc cho đến nay. Câu hỏi của tôi là, nếu kết hợp regex xấu làm cho nó không phải là đi cho dự án này và chi phí hoạt động cao (đặc biệt là để bảo trì) sẽ được thực hiện điều này trong thực tế. – Thomas

Trả lời

7

Tôi cũng đang đánh giá erlang để sử dụng làm trình thu thập dữ liệu web và có vẻ tốt cho đến nay.

Có rất nhiều mô-đun hữu ích hiện có: HTML parser, HTTP client, XPath, regex, cache.

otherpeople quan tâm đến trường hợp sử dụng tương tự, vì vậy bạn có thể học hỏi từ chúng.

Tuy nhiên, nếu đây chỉ là dự án một lần, tôi khuyên bạn nên sử dụng Python/Ruby/Perl vì nó sẽ dễ dàng hơn để bắt đầu.

+0

Cảm ơn bạn đã trả lời và các liên kết được cung cấp. Dự án nhằm mục đích kéo dài hơn, chi phí thời gian cho việc học Erlang là không thể bỏ qua (trên thực tế, nó sẽ rất thú vị khi học một ngôn ngữ mới :)) – Thomas

+1

vâng, thật thú vị khi học một điều gì đó khác biệt. Tôi đã làm việc thông qua hướng dẫn này: http://learnyousomeerlang.com/ – hoju

3

Nếu bạn quen thuộc và thoải mái với erlang thì tôi sẽ gắn bó với nó nếu tôi là bạn, mặc dù tôi không quen với erlang. Với lưu ý đó, tôi sẽ cung cấp cho bạn một số gợi ý:

  1. Không sử dụng cụm từ thông dụng để phân tích HTML, sử dụng XPATH thay thế.
    HTML, trong khi có cấu trúc, vẫn còn khá khó phân tích trong tự nhiên và regular expressions are fairly slow and unreliable for parsing HTML.
  2. Xác định xem crawler architecture của bạn là gì và re-visit policy của bạn là gì.
  3. Tìm số best selection policy cho bạn và triển khai.

Trình thu thập dữ liệu web là một hệ thống khá phức tạp để xây dựng và bạn phải quan tâm đến tốc độ, hiệu suất, khả năng mở rộng và đồng thời. Một số trình thu thập thông tin đáng chú ý nhất được viết bằng C++ and Java, nhưng tôi chưa từng nghe thấy bất kỳ trình thu thập thông tin nào được viết bằng erlang.

+0

Cảm ơn bạn đã đề xuất. Trình phân tích cú pháp của tôi phải được viết cụ thể cho diễn đàn Tôi sẽ phân tích cú pháp và tôi chỉ cần các phần rất nhỏ của toàn bộ cây xhtml, vì vậy các regex có thể rẻ hơn nhiều so với Xpath. Tôi nghĩ rằng những mối quan tâm bạn nâng cao khiến Erlang trở nên hoàn toàn phù hợp, tùy thuộc vào nút cổ chai có thể có của sự phù hợp với regex. – Thomas

+0

Bạn dự kiến ​​sẽ thu thập bao nhiêu lần thu thập thông tin? Số trang mỗi giờ? Nếu bạn không làm quá nhiều, sau đó regex sẽ không giết bạn, nhưng nó vẫn sẽ ít đáng tin cậy và chậm hơn so với xpath, imho. Regex cũng là một nỗi đau để duy trì, gỡ lỗi và hiểu, vì vậy tôi cố gắng tránh nó bằng mọi giá. Đó chỉ là sở thích của tôi. Nếu bạn nói với tôi một số chi tiết về các yêu cầu về hiệu năng, thì tôi cũng có thể giới thiệu một số thứ khác như một số giấy tờ về kiến ​​trúc cralwer. – Kiril

+0

bạn chính xác rằng regex ít đáng tin cậy hơn, tuy nhiên chúng thường nhanh hơn XPath – hoju

3

Erlang là tốt cho việc này. Các đại biểu thư viện regex của nó (gần như tất cả) làm việc với PCRE, đủ nhanh. Nhưng hãy tránh sử dụng chuỗi và sử dụng nhị phân! Cả hai đều sử dụng ít bộ nhớ hơn và nhanh hơn để dịch sang chuỗi C.