2012-02-28 27 views
6

Tôi sử dụng một máy phân tích quả cầu tuyết để thực hiện xuất phát. Kết quả không phải là những từ có ý nghĩa. Tôi đã gọi số này question.Quá trình đảo ngược xuất phát

Một trong những giải pháp là sử dụng cơ sở dữ liệu chứa bản đồ giữa phiên bản gốc của từ đó với một phiên bản ổn định của từ đó. (Ví dụ từ cộng đồng đến cộng đồng không có vấn đề gì cơ sở cho communti (cộng đồng/hoặc một số từ khác))

Tôi muốn biết nếu có một cơ sở dữ liệu thực hiện một chức năng như vậy.

Trả lời

4

Về mặt lý thuyết là không thể khôi phục một từ cụ thể từ thân cây, vì một gốc có thể phổ biến với nhiều từ . Một khả năng, tùy thuộc vào ứng dụng của bạn, sẽ là xây dựng một cơ sở dữ liệu của mỗi thân được ánh xạ tới một mảng của một vài từ. Nhưng sau đó bạn sẽ cần phải dự đoán một trong những từ đó là thích hợp cho một gốc để tái chuyển đổi.

Là một giải pháp rất ngây thơ cho vấn đề này, nếu bạn biết các thẻ từ, bạn có thể thử lưu trữ từ với các thẻ trong cơ sở dữ liệu của bạn:

run: 
    NN:  runner 
    VBG: running 
    VBZ: runs 

Sau đó, đưa ra các gốc "chạy" và thẻ "NN", bạn có thể xác định rằng "Á hậu" là từ có thể xảy ra nhất trong ngữ cảnh đó. Tất nhiên, giải pháp đó là hoàn hảo. Đáng chú ý, bạn cần phải xử lý thực tế rằng cùng một dạng từ có thể được gắn thẻ khác nhau trong các ngữ cảnh khác nhau. Nhưng hãy nhớ rằng bất kỳ nỗ lực nào để giải quyết vấn đề này sẽ là tốt nhất, gần đúng.

Chỉnh sửa: từ các nhận xét bên dưới, có vẻ như bạn có thể muốn sử dụng lemmatization thay vì xuất phát. Dưới đây là cách lấy các từ lemmas của các từ bằng cách sử dụng các số Stanford Core NLP tools:

import java.util.*; 

import edu.stanford.nlp.pipeline.*; 
import edu.stanford.nlp.ling.*; 
import edu.stanford.nlp.ling.CoreAnnotations.*; 

Properties props = new Properties(); 

props.put("annotators", "tokenize, ssplit, pos, lemma"); 
pipeline = new StanfordCoreNLP(props, false); 
String text = "Hello, world!"; 
Annotation document = pipeline.process(text); 

for(CoreMap sentence: document.get(SentencesAnnotation.class)) { 
    for(CoreLabel token: sentence.get(TokensAnnotation.class)) { 
     String word = token.get(TextAnnotation.class); 
     String lemma = token.get(LemmaAnnotation.class); 
    } 
} 
+0

Các từ như chạy làm việc tốt với thân cây. Tôi đang nói về những từ như efficieny. efficieny trên thân trở thành hiệu quả không có ý nghĩa. Những gì tôi đang lập kế hoạch để đi kèm là chuyển đổi hiệu quả thành hiệu quả bất kể hiệu quả sản xuất (hiệu quả/từ nào khác) – CTsiddharth

+0

Sau đó, có thể bạn đang tìm kiếm sự lemmatization (tìm mẫu "cơ sở" của từ đó - những gì sẽ được liệt kê trong từ điển) , không xuất phát (tìm "gốc" của từ). Thân cây có thể có nhiều từ cơ bản - "hiệu quả" -> "hiệu quả" -> "hiệu quả" không có ý nghĩa. Một bổ đề tương ứng với chính xác một từ cơ bản: "hiệu quả" -> "hiệu quả", "hiệu quả" -> "hiệu quả", "hiệu quả" -> "hiệu quả". Trong gốc, bạn mất cả hai sự uốn cong và từ cơ sở. Trong lemmatization, bạn chỉ mất uốn. Mã tôi vừa thêm vào bài đăng sẽ giúp bạn bắt đầu với các công cụ lemmatization của Stanford. – user2398029

+0

Xin chào .. hãy xem [câu hỏi này] (http://stackoverflow.com/questions/9528080/error-in-stanford-nlp-core#comment12070615_9528080) của tôi và giúp tôi! – CTsiddharth

1

Bạn có thể xem NCI Metathesaurus - mặc dù chủ yếu là y sinh học, chúng cung cấp các ví dụ về xử lý ngôn ngữ tự nhiên và một số bộ công cụ nguồn mở cho Java mà bạn có thể thấy hữu ích bằng cách duyệt mã của chúng.

2

Câu hỏi mà bạn đang tham chiếu chứa một phần thông tin quan trọng thường bị bỏ qua. Những gì bạn yêu cầu được gọi là "lemmatisation" - việc giảm các từ bị thổi phồng sang dạng kinh điển của họ. Nó có liên quan nhưng khác với gốc và vẫn là một câu hỏi nghiên cứu mở. Nó đặc biệt khó khăn cho các ngôn ngữ với hình thái phức tạp hơn (tiếng Anh không phải là khó). Wikipedia có danh sách phần mềm bạn có thể thử. Một công cụ khác mà tôi đã sử dụng là TreeTagger - nó thực sự nhanh và chính xác hợp lý, mặc dù mục đích chính là gắn thẻ một phần của lời nói và lemmatisation chỉ là một phần thưởng. Hãy thử googling cho "lemmatisation thống kê" (có, tôi có cảm giác mạnh mẽ về NLP thống kê vs dựa trên quy tắc)