2010-05-06 39 views
22

Tôi đang thực hiện một dự án cho một lớp học đại học mà tôi đang theo học.Khai thác văn bản với PHP

Tôi đang sử dụng PHP để xây dựng một ứng dụng web đơn giản phân loại các tweet là "tích cực" (hoặc hạnh phúc) và "tiêu cực" (hoặc buồn) dựa trên một bộ từ điển. Thuật toán tôi đang nghĩ đến bây giờ là phân loại Naive Bayes hoặc cây quyết định.

Tuy nhiên, tôi không thể tìm thấy bất kỳ thư viện PHP nào giúp tôi thực hiện một số xử lý ngôn ngữ nghiêm túc. Python có NLTK (http://www.nltk.org). Có điều gì giống như vậy đối với PHP không?

Tôi dự định sử dụng WEKA làm mặt sau của ứng dụng web (bằng cách gọi Weka trong dòng lệnh từ bên trong PHP), nhưng dường như không hiệu quả.

Bạn có biết tôi nên sử dụng gì cho dự án này không? Hoặc tôi nên chuyển sang Python?

Cảm ơn

+2

Bộ phân loại Naive Bayes không thực sự khó viết nếu bạn hiểu các nguyên tắc cơ bản. Bạn có thể thực sự làm tất cả mọi thứ trong PHP theo cách đó. San Jacinto đã bao gồm mọi thứ tôi đã nói về phần NLP. Một điều khác tôi có thể nói với bạn từ một dự án tương tự mà tôi đã làm chỉ một vài tuần trước là phân loại tình cảm bằng cách sử dụng phương pháp tiếp cận túi tiêu chuẩn không thực sự hoạt động tốt. Tôi đã không thử bất cứ thứ gì như n-gram, mặc dù ... Tôi có cảm giác rằng họ sẽ thực hiện tốt hơn, nhưng tất nhiên điều đó sẽ cung cấp cho bạn tấn kích thước bổ sung ... –

+0

Không có bất kỳ dấu hiệu nào trong cả hai bài đăng hoặc liên kết của bạn với tư cách là giải pháp phù hợp. –

+0

Text_LanguageDetect của PEAR có thể nhận dạng 52 ngôn ngữ của con người từ các mẫu văn bản và trả về điểm số tin cậy cho mỗi mẫu. Đây không phải là một lựa chọn thú vị để đưa vào tài khoản? – nuqqsa

Trả lời

9

Nếu bạn sắp sử dụng trình phân loại Naive Bayes, bạn không thực sự cần toàn bộ quá trình xử lý NL. Tất cả những gì bạn cần là một thuật toán để chặn các từ trong các tweet và nếu bạn muốn, hãy loại bỏ các từ dừng lại.

Thuật toán gốc rất nhiều và không khó mã hóa. Loại bỏ các từ dừng chỉ là vấn đề tìm kiếm một bản đồ băm hoặc một cái gì đó tương tự. Tôi không thấy một sự biện minh để chuyển đổi nền tảng phát triển của bạn để chứa NLTK, mặc dù nó là một công cụ rất hay.

2

Bạn cũng có thể sử dụng API uClassify để làm điều gì đó tương tự như Naive Bayes. Về cơ bản bạn đào tạo một trình phân loại như bạn làm với bất kỳ thuật toán nào (ngoại trừ việc bạn đang thực hiện nó thông qua giao diện web hoặc bằng cách gửi các tài liệu xml tới API). Sau đó, bất cứ khi nào bạn nhận được một tweet mới (hoặc lô tweet), bạn gọi API để có nó phân loại chúng. Nó nhanh và bạn không phải lo lắng về việc điều chỉnh nó. Tất nhiên, điều đó có nghĩa là bạn mất tính linh hoạt mà bạn có được bằng cách tự kiểm soát trình phân loại, nhưng điều đó cũng có nghĩa là ít công việc hơn cho bạn nếu chính nó không phải là mục tiêu của dự án lớp.

0

bạn cũng có thể sử dụng tiết kiệm hoặc gearman để đối phó với NLTK

1

Hãy thử calais mở - http://viewer.opencalais.com/. Nó có api, các lớp PHP và nhiều hơn nữa. Ngoài ra, LingPipe cho tác vụ này - http://alias-i.com/lingpipe/index.html

+0

Trước đây là giao diện web, không phải thư viện (_if_ cũng có thư viện, vui lòng cung cấp liên kết đến đó). Sau này là một thư viện, nhưng đối với Java, không phải PHP. – jogojapan

5

Tôi đã thực hiện một dự án tương tự cách đây một thời gian - chỉ phân loại các mục tin RSS thay vì twitter - cũng sử dụng PHP cho front-end và WEKA cho back-end. Tôi đã sử dụng PHP/Java Bridge tương đối đơn giản để sử dụng - một vài dòng được thêm vào mã Java (WEKA) của bạn và nó cho phép PHP của bạn gọi các phương thức của nó. Dưới đây là ví dụ về mã PHP bên từ trang web của họ:

<?php 
require_once("http://localhost:8087/JavaBridge/java/Java.inc"); 

$world = new java("HelloWorld"); 
echo $world->hello(array("from PHP")); 
?> 

Sau đó (như ai đó đã đề cập), bạn chỉ cần lọc ra các từ dừng. Giữ một tập tin txt cho điều này là khá tiện dụng cho việc thêm từ mới (họ có xu hướng chồng chất lên khi bạn bắt đầu lọc ra những từ không liên quan và tài khoản cho lỗi chính tả).

Mô hình ngây thơ có các giả định tính năng độc lập mạnh, tức là nó không tính các từ thường được ghép nối (chẳng hạn như thành ngữ hoặc cụm từ) - chỉ lấy từng từ như một sự xuất hiện độc lập. Tuy nhiên, nó có thể làm tốt hơn một số phương pháp phức tạp hơn (chẳng hạn như từ gốc, IIRC) và phải hoàn hảo cho một lớp học đại học mà không làm cho nó không cần thiết phức tạp.

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