2010-05-07 28 views
5

phép nói rằng tôi có ba mô hình/bảng: operating_systems, words, và programming_languages:Làm thế nào để chế tạo một động cơ nhỏ như Wolfram | Alpha?

# operating_systems 
name:string created_by:string family:string 
Windows  Microsoft   MS-DOS 
Mac OS X Apple    UNIX 
Linux  Linus Torvalds UNIX 
UNIX  AT&T    UNIX 

# words 
word:string defenitions:string 
window  (serialized hash of defenitions) 
hello  (serialized hash of defenitions) 
UNIX  (serialized hash of defenitions) 

# programming_languages 
name:string created_by:string example_code:text 
C++   Bjarne Stroustrup #include <iostream> etc... 
HelloWorld Jeff Skeet  h 
AnotherOne Jon Atwood  imports 'SORULEZ.cs' etc... 

Khi người dùng tìm kiếm hello, hệ thống hiển thị defenitions của 'hello'. Điều này tương đối dễ thực hiện. Tuy nhiên, khi người dùng tìm kiếm UNIX, động cơ phải chọn: word hoặc operating_system. Ngoài ra, khi người dùng tìm kiếm windows (chữ cái nhỏ 'w'), công cụ chọn word, nhưng cũng phải hiển thị Assuming 'windows' is a word. Use as an <a href="etc..">operating system</a> instead.

Có ai có thể chỉ cho tôi đúng hướng với phân tích cú pháp và chọn chủ đề của truy vấn tìm kiếm không? Cảm ơn.


Lưu ý: nó không cần để có thể thực hiện các phép tính như WA có thể làm.

Trả lời

2

Có một bảng chỉ số mới được gọi là terms có chứa phiên bản được mã hóa của mỗi cụm từ hợp lệ. Bằng cách đó, bạn chỉ phải tìm kiếm một bảng.

# terms 
Id Name  Type    Priority 
1 window word    false 
2 Windows operating_system true 

Sau đó, bạn có thể xem mức độ phù hợp với cụm từ tìm kiếm của người dùng. I E. "Windows" sẽ là 100% phù hợp với 2 - vì vậy hãy giả sử điều đó, nhưng kết quả phù hợp với 1 cũng vậy, do đó, đề nghị thay thế. Bạn phải viết công cụ quy tắc của riêng mình để quyết định mức độ phù hợp của từ (ví dụ: "cửa sổ" so với "Windows")? Trường Priority có thể là quyết định cuối cùng nếu công cụ quy tắc không thể quyết định và trong lý thuyết có thể được thúc đẩy bởi hoạt động của người dùng để nó biết được những gì người dùng có nhiều khả năng đề cập đến.

+0

Cảm ơn, tôi sẽ xem xét nó. –

+0

Tôi đã cố gắng làm cho nó hoạt động! Tôi sử dụng partials để hiển thị dữ liệu. Một phần cho mỗi chủ đề. –

1

Và điều gì sẽ tạo bộ nhớ cache dưới dạng bảng cơ sở dữ liệu nơi tất cả các từ khóa sẽ là.

Các truy vấn tìm kiếm sẽ là một cái gì đó như thế này:

SELECT * FROM keywords WHERE keyword = '<YourKeyWord>' /* mysql */ 

các từ khóa bảng sẽ chứa một số loại tài liệu tham khảo các mô-đun của bạn.

Ưu điểm của sự chấp thuận này là tìm kiếm nhanh chóng.

Bạn có thể sử dụng hai truy vấn để mô phỏng hành vi mà bạn yêu cầu:

  • sánh chính xác (không có vấn đề trong mysql)
  • Trường hợp tìm kiếm không nhạy cảm
0

Wolfram Alpha phức tạp hơn nhiều so với ví dụ của bạn ... Tôi không chắc chắn về hoạt động bên trong của nó (tôi đã đọc rất ít), nhưng tôi tin rằng nó rất lớn và phức tạp automated inference system. Chúng khá tầm thường để thực hiện (Prolog về cơ bản là một mục đích chung mà bạn có thể đặt bất kỳ dữ liệu nào bạn cần), nhưng chúng rất khó để có ích.

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