5

Tôi đang cố triển khai dự đoán bằng cách phân tích các câu. Hãy xem xét những điều sau đây [khá nhàm chán] câuCấu trúc dữ liệu để lưu trữ các liên kết từ

Call ABC 
Call ABC again 
Call DEF 

Tôi muốn có một cấu trúc dữ liệu cho các câu trên như sau:

Call: (ABC, 2), (again, 1), (DEF, 1) 
ABC: (Call, 2), (again, 1) 
again: (Call, 1), (ABC, 1) 
DEF: (Call, 1) 

Nói chung, Word: (Word_it_appears_with, Frequency), ....

Xin lưu ý vốn có dư thừa trong loại dữ liệu này. Rõ ràng, nếu tần suất ABC là 2 dưới Call, tần suất Call là 2 dưới ABC. Làm cách nào để tối ưu hóa điều này?

Ý tưởng là sử dụng dữ liệu này khi một câu mới đang được nhập. Ví dụ: nếu Call đã được nhập, từ dữ liệu, thật dễ dàng để nói ABC có nhiều khả năng xuất hiện trong câu và cung cấp đề xuất đó làm đề xuất đầu tiên, tiếp theo là một lần nữa và DEF.

Tôi nhận thấy đây là một trong số một triệu cách có thể thực hiện dự đoán và tôi háo hức mong đợi các đề xuất về các cách khác để thực hiện điều đó.

Cảm ơn

+0

Tôi khá chắc chắn rằng không có câu trả lời rõ ràng vì mục tiêu của bạn không đủ rõ ràng. Về cơ bản, đây là vấn đề về AI, và các giải pháp AI thường có những điều kỳ quặc mà mọi người có thể sống chung; tuy nhiên, mà không biết bối cảnh chính xác của bạn, thật khó để nói những gì quirks sẽ được chấp nhận. Vì lý do này, tôi sẽ bỏ phiếu để đóng câu hỏi của bạn. (Đó là một điều rất thú vị, không thích hợp cho Stack Overflow theo ý kiến ​​của tôi.) – zneak

+0

Điều đó nói rằng, bạn có thể sử dụng một biểu diễn cây cho các từ của bạn, và có mỗi nhánh cây giữ một xác suất. Điều này có thể làm việc tốt nếu đầu vào là lặp đi lặp lại và cú pháp tương đối cố định, nhưng bạn sẽ gặp khó khăn khi kết hợp ngôn ngữ tự nhiên như thế. – zneak

+0

Tôi có thể sử dụng cây, vâng, nhưng tôi muốn loại bỏ sự dư thừa trong dữ liệu: Tần suất của từ1 xảy ra với từ2 rõ ràng sẽ giống như từ2 xảy ra với từ1. Ngoài ra, đầu vào là liên tục, do đó xác suất nằm ngoài câu hỏi. – WeNeigh

Trả lời

1

Có thể sử dụng biểu đồ hai chiều. Bạn có thể lưu trữ các từ dưới dạng các nút, với các cạnh như tần số.

0

Bạn có thể sử dụng cấu trúc dữ liệu sau quá:

Map<String, Map<String, Long>> 
+0

Ổi đã thực hiện điều này trong lớp Bảng. http://docs.guava-libraries.googlecode.com/git-history/v10.0.1/javadoc/com/google/common/collect/Table.html –

+0

@JohnB, đó là điều tốt để biết. Cảm ơn bạn về thông tin. –

0

tôi sẽ xem xét một trong hai lựa chọn:

Lựa chọn 1:

class Freq { 
    String otherWord; 
    int freq; 
} 

Multimap<String, Freq> mymap; 

hoặc có thể là một bảng

Table<String, String, int> 

Với Freq ở trên: bạn có thể muốn lập bản đồ hai hướng:

class Freq{ 
    String thisWord; 
    int otherFreq; 
    Freq otherWord; 
} 

Điều này cho phép cập nhật rất nhanh các cặp dữ liệu.

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