Java hoặc Python để xử lý ngôn ngữ tự nhiên [đã đóng]


112

Tôi muốn biết ngôn ngữ lập trình nào tốt hơn để xử lý ngôn ngữ tự nhiên. Java hay Python ? Tôi đã tìm thấy rất nhiều câu hỏi và câu trả lời về nó. Nhưng tôi vẫn bị mất trong việc lựa chọn cái nào để sử dụng.

Và tôi muốn biết thư viện NLP nào để sử dụng cho Java vì có rất nhiều thư viện (LingPipe, GATE, OpenNLP, StandfordNLP). Đối với Python, hầu hết các lập trình viên khuyên dùng NLTK.

Nhưng nếu tôi phải thực hiện một số xử lý văn bản hoặc trích xuất thông tin từ dữ liệu không có cấu trúc (chỉ là văn bản tiếng Anh đơn giản được tạo hình tự do) để có được một số thông tin hữu ích, thì lựa chọn tốt nhất là gì? Java hay Python? Thư viện phù hợp?

Đã cập nhật

Những gì tôi muốn làm là trích xuất thông tin sản phẩm hữu ích từ dữ liệu phi cấu trúc (Ví dụ: người dùng thực hiện các hình thức quảng cáo khác nhau về điện thoại di động hoặc máy tính xách tay bằng tiếng Anh không chuẩn)


47
Tôi ghét rằng những câu hỏi kiểu này không được chào đón ở đây trên SO. Tôi nghĩ mục đích là để ngăn chặn thánh chiến, nhưng điều này góp phần vào nội dung IMO.
L0j1k

2
Nếu có thể nói "Thư viện NLP Java và Python hàng đầu và thế mạnh tương đối của chúng là gì?" có lẽ điều đó giải quyết nó? Câu trả lời thay đổi theo thời gian, nhưng tôi cũng thấy những câu hỏi như thế này rất hữu ích.
Scott Smith

5
Tôi cũng ước những loại câu hỏi này được chào đón trên SO. Gần đây tôi đã cố gắng khảo sát điểm mạnh của NLP trong Python vs R, và nó ngay lập tức bị hạ gục. Không bueno cho những người cố gắng tạo khung cho dự án của họ bằng ngôn ngữ phù hợp.
Ksofiac

Câu trả lời:


133

Java và Python cho NLP rất được ưu tiên hoặc cần thiết. Tùy thuộc vào công ty / dự án, bạn sẽ cần sử dụng cái này hay cái kia và thường không có nhiều sự lựa chọn trừ khi bạn đang hướng tới một dự án.

Ngoài NLTK(www.nltk.org), thực sự có các thư viện khác để xử lý văn bản trong python:

(để biết thêm, hãy xem https://pypi.python.org/pypi?%3Aaction=search&term=natural+language+processing&submit=search )

Đối với Java, có rất nhiều người khác nhưng đây là một danh sách khác:

Đây là một so sánh tốt để xử lý chuỗi cơ bản, hãy xem http://nltk.googlecode.com/svn/trunk/doc/howto/nlp-python.html

So sánh hữu ích giữa GATE vs UIMA và OpenNLP, hãy xem https://www.assembla.com/spaces/extraction-of-cost-data/wiki/Gate-vs-UIMA-vs-OpenNLP?version=4

Nếu bạn không chắc chắn đâu là ngôn ngữ sử dụng cho NLP, cá nhân tôi nói, "bất kỳ ngôn ngữ nào sẽ cung cấp cho bạn phân tích / đầu ra mong muốn", hãy xem Ngôn ngữ hoặc công cụ nào để học để xử lý ngôn ngữ tự nhiên?

Đây là một số công cụ NLP gần đây (2017): https://github.com/alvations/awesome-community-curated-nlp

Danh sách các công cụ NLP cũ hơn (2013): http://web.archive.org/web/20130703190201/http://yauhenklimovich.wordpress.com/2013/05/20/tools-nlp


Ngoài các công cụ xử lý ngôn ngữ, bạn sẽ rất cần machine learning các công cụ để kết hợp vào NLPđường ống.

Có cả một phạm vi trong PythonJavavà một lần nữa, tùy thuộc vào sở thích và liệu các thư viện có đủ thân thiện với người dùng hay không:

Thư viện Học máy trong python:

(để biết thêm, hãy xem https://pypi.python.org/pypi?%3Aaction=search&term=machine+learning&submit=search )


Với trận sóng thần học sâu (2015) gần đây trong NLP , bạn có thể cân nhắc: https://en.wikipedia.org/wiki/Comparison_of_deep_learning_software

Tôi sẽ tránh liệt kê các công cụ học sâu ra khỏi chủ nghĩa không thiên vị / trung lập.


Các câu hỏi Stackoverflow khác cũng yêu cầu cho các công cụ NLP / ML:


1
Cảm ơn vì đã cho rất nhiều thông tin về NLP và ML công cụ
Jin Ling

42

Câu hỏi rất mở đã kết thúc. Điều đó nói rằng, thay vì chọn một, dưới đây là một so sánh tùy thuộc vào ngôn ngữ mà bạn muốn sử dụng (vì có những thư viện tốt có sẵn cho cả hai ngôn ngữ).

Python

Về Python, nơi đầu tiên bạn nên xem là Bộ công cụ ngôn ngữ tự nhiên Python . Như họ lưu ý trong phần mô tả, NLTK là nền tảng hàng đầu để xây dựng các chương trình Python để hoạt động với dữ liệu ngôn ngữ của con người. Nó cung cấp giao diện dễ sử dụng cho hơn 50 tài nguyên ngữ liệu và từ vựng như Mạng từ, cùng với một bộ thư viện xử lý văn bản để phân loại, mã hóa, tạo gốc, gắn thẻ, phân tích cú pháp và lập luận ngữ nghĩa.

Ngoài ra còn có một số mã tuyệt vời mà bạn có thể tra cứu có nguồn gốc từ dự án Bộ công cụ ngôn ngữ tự nhiên của Google dựa trên Python. Bạn có thể tìm thấy liên kết đến mã đó tại đây trên GitHub .

Java

Nơi đầu tiên cần tìm sẽ là Nhóm Xử lý Ngôn ngữ Tự nhiên của Stanford . Tất cả phần mềm được phân phối ở đó đều được viết bằng Java. Tất cả các bản phân phối gần đây đều yêu cầu Oracle Java 6+ hoặc OpenJDK 7+. Các gói phân phối bao gồm các thành phần cho lệnh gọi dòng lệnh, tệp jar, API Java và mã nguồn.

Một lựa chọn tuyệt vời khác mà bạn thấy trong nhiều môi trường máy học ở đây (tùy chọn chung), là Weka . Weka là một tập hợp các thuật toán học máy cho các tác vụ khai thác dữ liệu. Các thuật toán có thể được áp dụng trực tiếp vào tập dữ liệu hoặc được gọi từ mã Java của riêng bạn. Weka chứa các công cụ để xử lý trước dữ liệu, phân loại, hồi quy, phân cụm, quy tắc kết hợp và trực quan hóa. Nó cũng rất phù hợp để phát triển các chương trình máy học mới.


9
Câu trả lời tuyệt vời. Tôi thực sự không hiểu tại sao những câu hỏi kiểu này lại bị coi thường ở đây. +1
L0j1k

8
Tôi hoàn toàn đồng ý. Câu hỏi được hỏi là chung chung. Điều đó nói lên rằng, đây chính xác là những dạng câu hỏi mà tôi thường gặp phải, đặc biệt là khi tôi mới làm quen với một lĩnh vực nào đó.
Nathaniel Payne

1
Về thư viện và công cụ dựa trên Java, một thứ tuyệt vời khác mà bạn có thể xem là LingPipe. alias-i.com/lingpipe
Nathaniel Payne

2
@NathanielPayne: Cảm ơn bạn rất nhiều vì đã góp ý. Điều đó cho tôi một số hướng dẫn để bắt đầu NLP.
Jin Ling
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.