Java หรือ Python สำหรับการประมวลผลภาษาธรรมชาติ [ปิด]


112

ฉันต้องการทราบว่าภาษาโปรแกรมใดดีกว่าสำหรับการประมวลผลภาษาธรรมชาติ JavaหรือPython ? ฉันพบคำถามและคำตอบมากมายเกี่ยวกับเรื่องนี้ แต่ฉันยังคงหลงเลือกว่าจะใช้อันไหนดี

และฉันต้องการทราบว่าไลบรารี NLP ใดที่จะใช้สำหรับ Java เนื่องจากมีไลบรารีจำนวนมาก (LingPipe, GATE, OpenNLP, StandfordNLP) สำหรับ Python โปรแกรมเมอร์ส่วนใหญ่แนะนำ NLTK

แต่ถ้าฉันต้องการประมวลผลข้อความหรือดึงข้อมูลจากข้อมูลที่ไม่มีโครงสร้าง (เพียงแค่สร้างข้อความภาษาอังกฤษธรรมดาที่ไม่เสียค่าใช้จ่าย) เพื่อให้ได้ข้อมูลที่เป็นประโยชน์ตัวเลือกที่ดีที่สุดคืออะไร? Java หรือ Python? ห้องสมุดที่เหมาะสม?

Updated

สิ่งที่ฉันต้องการทำคือดึงข้อมูลผลิตภัณฑ์ที่เป็นประโยชน์จากข้อมูลที่ไม่มีโครงสร้าง (เช่นผู้ใช้สร้างโฆษณาในรูปแบบต่างๆเกี่ยวกับโทรศัพท์มือถือหรือแล็ปท็อปที่มีภาษาอังกฤษไม่ได้มาตรฐาน)


47
ฉันเกลียดที่ SO SO ไม่ต้อนรับคำถามประเภทนี้ ฉันคิดว่าเจตนาคือการป้องกันไม่ให้เกิดสงครามศักดิ์สิทธิ์ แต่สิ่งนี้มีส่วนช่วยในเนื้อหา IMO
L0j1k

2
หากมีการพูดกันว่า "ไลบรารี Java และ Python NLP ชั้นนำและจุดแข็งที่สัมพันธ์กันคืออะไร" อาจจะแก้ได้? คำตอบเปลี่ยนไปตามกาลเวลา แต่ฉันก็พบว่าคำถามนี้มีประโยชน์มากเช่นกัน
Scott Smith

5
ฉันหวังว่าคำถามประเภทนี้จะได้รับการต้อนรับจาก SO ฉันเพิ่งพยายามสำรวจจุดแข็งของ NLP ใน Python vs R และมันก็ถูกยิงทันที ไม่เหมาะสำหรับผู้ที่พยายามจัดกรอบโครงการด้วยภาษาที่เหมาะสม
Ksofiac

คำตอบ:


133

Java vs Python สำหรับ NLP นั้นขึ้นอยู่กับความชอบหรือความจำเป็นเป็นอย่างมาก ขึ้นอยู่กับ บริษัท / โครงการคุณจะต้องใช้อย่างใดอย่างหนึ่งและมักจะไม่มีทางเลือกมากนักเว้นแต่คุณจะมุ่งหน้าโครงการ

นอกจากNLTK(www.nltk.org) แล้วยังมีไลบรารีอื่น ๆ สำหรับการประมวลผลข้อความในpython:

(สำหรับข้อมูลเพิ่มเติมโปรดดูhttps://pypi.python.org/pypi?%3Aaction=search&term=natural+language+processing&submit=search )

สำหรับJavaมีอีกหลายตัน แต่นี่คือรายการอื่น:

นี่เป็นการเปรียบเทียบที่ดีสำหรับการประมวลผลสตริงพื้นฐานโปรดดูที่http://nltk.googlecode.com/svn/trunk/doc/howto/nlp-python.html

การเปรียบเทียบ GATE กับ UIMA เทียบกับ OpenNLP ที่เป็นประโยชน์โปรดดูhttps://www.assembla.com/spaces/extraction-of-cost-data/wiki/Gate-vs-UIMA-vs-OpenNLP?version=4

หากคุณไม่แน่ใจว่าจะใช้ภาษาใดสำหรับ NLP โดยส่วนตัวฉันพูดว่า "ภาษาใดก็ได้ที่จะให้การวิเคราะห์ / ผลลัพธ์ที่ต้องการ" โปรดดูภาษาหรือเครื่องมือใดในการเรียนรู้สำหรับการประมวลผลภาษาธรรมชาติ

นี่คือเครื่องมือ NLP ล่าสุด (2017): https://github.com/alvations/awesome-community-curated-nlp

รายการเครื่องมือ NLP รุ่นเก่า (2013): http://web.archive.org/web/20130703190201/http://yauhenklimovich.wordpress.com/2013/05/20/tools-nlp


นอกเหนือจากเครื่องมือประมวลผลภาษาแล้วคุณยังต้องมีmachine learningเครื่องมืออีกมากเพื่อรวมเข้ากับNLPท่อ

มีช่วงทั้งหมดในPythonและJavaอีกครั้งขึ้นอยู่กับความชอบและไลบรารีนั้นใช้งานง่ายเพียงพอหรือไม่:

ไลบรารี Machine Learning ใน python:

(สำหรับข้อมูลเพิ่มเติมโปรดดูhttps://pypi.python.org/pypi?%3Aaction=search&term=machine+learning&submit=search )


ด้วยเหตุการณ์สึนามิในการเรียนรู้เชิงลึกเมื่อเร็ว ๆ นี้ (2015) ใน NLPคุณอาจพิจารณา: https://en.wikipedia.org/wiki/Comparison_of_deep_learning_software

ฉันจะหลีกเลี่ยงการแสดงรายการเครื่องมือการเรียนรู้เชิงลึกจากการไม่เล่นพรรคเล่นพวก / ความเป็นกลาง


คำถาม Stackoverflow อื่น ๆ ที่ถามถึงเครื่องมือ NLP / ML:


1
ขอบคุณที่ให้ข้อมูลมากมายเกี่ยวกับเครื่องมือ NLP และ ML
Jin Ling

42

คำถามคือปลายเปิดมาก ที่กล่าวว่าแทนที่จะเลือกอย่างใดอย่างหนึ่งด้านล่างเป็นการเปรียบเทียบขึ้นอยู่กับภาษาที่คุณต้องการใช้ (เนื่องจากมีไลบรารีที่ดีให้บริการในทั้งสองภาษา)

หลาม

ในแง่ของงูใหญ่เป็นสถานที่แรกที่คุณควรมีลักษณะที่เป็นงูหลามภาษาธรรมชาติ Toolkit ตามที่ระบุไว้ในคำอธิบาย NLTK เป็นแพลตฟอร์มชั้นนำในการสร้างโปรแกรม Python เพื่อทำงานกับข้อมูลภาษามนุษย์ มีอินเทอร์เฟซที่ใช้งานง่ายให้กับองค์กรและทรัพยากรคำศัพท์มากกว่า 50 รายการเช่น WordNet พร้อมกับชุดของไลบรารีการประมวลผลข้อความสำหรับการจัดหมวดหมู่การใช้โทเค็นการแยกการติดแท็กการแยกวิเคราะห์และการให้เหตุผลเชิงความหมาย

นอกจากนี้ยังมีโค้ดที่ยอดเยี่ยมที่คุณสามารถค้นหาที่มาจากโครงการ Natural Language Toolkit ของ Google ซึ่งใช้ Python คุณสามารถค้นหาเชื่อมโยงไปยังรหัสที่นี่บน GitHub

ชวา

สถานที่แรกที่ดูจะเป็นสแตนฟอประมวลผลภาษาธรรมชาติกลุ่ม ซอฟต์แวร์ทั้งหมดที่แจกจ่ายนั้นเขียนด้วยภาษาจาวา การแจกแจงล่าสุดทั้งหมดต้องการ Oracle Java 6+ หรือ OpenJDK 7+ แพ็กเกจการแจกจ่ายประกอบด้วยส่วนประกอบสำหรับการเรียกใช้บรรทัดคำสั่งไฟล์ jar Java API และซอร์สโค้ด

อีกหนึ่งทางเลือกที่ดีที่คุณเห็นในจำนวนมากของเครื่องสภาพแวดล้อมการเรียนรู้ที่นี่ (ตัวเลือกทั่วไป) เป็นWeka Weka คือชุดของอัลกอริธึมการเรียนรู้ของเครื่องสำหรับงานขุดข้อมูล อัลกอริทึมสามารถนำไปใช้โดยตรงกับชุดข้อมูลหรือเรียกจากโค้ด Java ของคุณเอง Weka มีเครื่องมือสำหรับการประมวลผลข้อมูลล่วงหน้าการจำแนกการถดถอยการจัดกลุ่มกฎการเชื่อมโยงและการแสดงภาพ นอกจากนี้ยังเหมาะอย่างยิ่งสำหรับการพัฒนารูปแบบแมชชีนเลิร์นนิงใหม่ ๆ


9
คำตอบที่ยอดเยี่ยม ฉันไม่เข้าใจจริงๆว่าทำไมคำถามประเภทนี้ถึงดูถูกที่นี่ +1
L0j1k

8
ฉันเห็นด้วยอย่างสมบูรณ์ คำถามที่ถามเป็นเรื่องทั่วไป ที่กล่าวว่านี่เป็นคำถามประเภทหนึ่งที่ฉันมักจะพบเจอบ่อยๆโดยเฉพาะอย่างยิ่งเมื่อฉันยังใหม่กับพื้นที่
Nathaniel Payne

1
ในแง่ของไลบรารีและเครื่องมือที่ใช้ Java สิ่งที่ยอดเยี่ยมอีกอย่างที่คุณอาจดูคือ LingPipe alias-i.com/lingpipe
Nathaniel Payne

2
@NathanielPayne: ขอบคุณมากสำหรับคำแนะนำ นั่นทำให้ฉันมีคำแนะนำในการเริ่ม NLP
Jin Ling
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.