10/10/2018, 10:31

làm sao PHP tìm kiếm trong mySQL logic mờ

cho mình hỏi làm sao để PHP tìm kiếm trong database dữ liệu theo kiểu kí tự đại diện ? chuổi phía sau bấy kỳ * tìm chính xác trong ""
Ví dụ "X?"+"hiệu honda*"
có nghĩa tìm tron data cái nào có Xe(Xa,Xế) và có hiệu honda loại cũng được ví dụ honda125 hoặc honda50CC.
Thấy PHP có ? và * để so sánh chuổi nhưng kg biết sau để tìm kiếm trong cơ sở dữ liệu tuơng đối lớn (cho ra cả tram kết quả nên phải dùng từ khóa mới tìm nhanh được )
cái này thấy người ta nói là fuzzy logic phải kg vậy?
Dctran viết 12:46 ngày 10/10/2018
Cái mà bạn nói chính là tìm kiếm xấp xỉ, đây là một vấn đề cũng đang được quan tâm hiện nay. Tôi ko chắc MySQL có hỗ trợ sẵn tìm kiếm xấp xỉ hay không (hình như là không có), muốn tìm kiếm xấp xỉ bạn phải cài đặt các thuật toán về so mẫu xấp xỉ.

Thuật toán so mẫu xấp xỉ:

- Giả sử có 2 chuỗi P và S, khi đó bạn cần phải xây dựng ra 1 đại lượng để đánh giá mức đọ tương tự (xấp xỉ) giữa 2 chuỗi nói trên. Cái này gọi là H(S,P)

+ Nếu H(S,P) = 1 thì chuỗi P chứa chuỗi S
+ Nếu H(S,P) = 0 thì chuối P ko chứa chuối S
+ Nếu 0 < H(S,P) < 1 thì đây là đại lượng cho phép đánh giá mức độ tương tự giữa 2 xâu. Rõ ràng nếu H(S,P) mà càng gần 1 thì chuỗi S càng gần chuỗi P .

Vậy vấn đề là xây dựng H(S,P) như thế nào?

- Hiện tại có nhiều thuật toán để giải quyết vấn đề trên, thuật toán mà tôi từng dùng là sử dụng otomat mờ nếu bạn cần có thể liên hệ với tôi để tham khảo các thuật toán về tìm kiếm xấp xỉ (ngày xưa tôi làm đồ án TN về cái này )

Lựa chọn ngôn ngữ

- Sử dụng ngôn ngữ PHP sẽ rất tốt nếu chuỗi tìm kiếm của bạn là tiếng không dấu, còn nếu là tiếng Việt sẽ phức tạp hơn vì khi đó bạn phải sử dụng đến các hàm trong multi-byte String.

- Nếu có thể nên chuyển qua ASP.NET và MSSQL hỗ trợ Unicode rất mạnh việc cài đặt có thể dễ dàng hơn.
lazzy viết 12:46 ngày 10/10/2018
cảm ơn bạn.
Mình đang làm đồ án vè quản lý thư viện trong đó có modun tìm kiếm tên sách và nội dung. Ông thầy bắt mình phải tìm kiếm trong cơ sở dử liệu sách như vậy. ổng nói là hiện nay thư viện của trường lên đến vài ngàn cuốn nên việc làm hàm tìm kiếm như vậy rất hữu hiệu.
Mong bạn mail cho mình tại địa chỉ lazzyvn@yahoo.com.
Cho mình hỏi thăm bạn có biết cách để lấy nội dung tìm kiếm trên mạng đưa vào cơ sở dử liệu local không?. Ví dụ mình có số ISBN của một cuốn sách mình vào ISBNdb.com trong đó nó có một textflied chỉ cần nhập tên hoặc tự vào nó cho ra kết quả. Làm sao mình có thể lấy được kết quả đó.
Nếu phân tích source web thì sẻ được file HTML trong đó mỗi phần của sách như số ISBN tiêu đề tác giả sẻ nằm trong một thẻ <DIV> với id="tiêu dề"
Mình thấy người ta nói dùng API trong PHP để giải quyết nhưng giờ vẫn kg biết làm sao. Mong bạn hướng dẫn giúp
www.programmableweb.com/api/ISBNdb
http://isbndb.com/account/dev/api/
Cảm ơn bạn nhiều.
Dctran viết 12:36 ngày 10/10/2018
- Thứ nhất tôi khuyên bạn nếu viết ứng dụng chạy trên local thì chọn luôn dotNet hỗ trợ Unicode mạnh mà tên sách thì chắc chắn là sử dụng tiếng Việt rồi.

- Thứ hai về vấn đề search trên web, mình cũng chưa từng thử bao lấy kết quả từ 1 trang rồi đưa vào database của mình bao giờ. Để giải quyết vấn đề này chắc phải cài đặt 1 search engine mà cơ chế tìm trên web thì mình chưa từng thử. Vấn đề này khá rộng có thể làm luôn 1 đồ án tốt nghiệp về riêng nó cũng được.

- Thứ ba là việc tìm kiếm xấp xỉ là rất cần thiết khi ta không thể nhớ chính xác được tên cuốn sách. Theo ý tôi khi tìm kiếm bạn nên thành các lựa chọn như sau:

+ Tìm kiếm chính xác theo các trường của sách: Cái này sử dụng hàm LIKE cũng như các toán tử AND hoặc OR của CSDL vốn rất thông dụng.

+ Tìm kiếm theo từ khóa bao gồm:

1. Tìm kiếm chính xác là tìm theo đúng từ mà mình nhập vào

2. Tìm kiếm xấp xỉ

a) Tìm kiếm xấp xỉ chính xác từng từ: Ví dụ khoa học kỹ thuật máy tính tương tự với khoa học máy tính. Cái này có thể thấy rất rõ trong tìm kiếm kiểu google.

b) Tím kiếm xấp xỉ tựa ngữ nghĩa: Ví dụ xác suất có thể tương tự với xác xuất trường hợp người ta đánh sai chính tả hoặc so mẫu tương tự với xoo mẫu hoặc như bạn nói là honda125cc có thể tương tự với honda150

Khi đó đồ án của bạn sẽ đảm bảo được các kiểu tìm kiếm đạt yêu cầu đề ra.

Cuốn sách mà tôi gửi cho bạn có tên là "Ứng dụng otomat mờ trong bài toán so mẫu" trình bày khá nhiều thuật toán hay về bài toán so mẫu chính xác lẫn xấp xỉ. Hy vọng sẽ giúp bạn được nhiều để giải quyết vấn đề trên. Hiện tại tôi đang tìm lại tài liệu, có thể 1 vài ngày nữa sẽ gửi cho bạn. Nếu có vướng mắc gì về việc cài đặt các thuật toán có thể liên hệ với tôi. Chúc bạn thành công!
lazzy viết 12:38 ngày 10/10/2018
Thiệt tình là mình muốn xài đồ Microsoft cho dễ xài nhưng ông thầy bắt buộc mình phải dùng MySQL và PHP mới khổ.
Vụ tìm kiếm bằng Like và % trong MySQL thì mình làm được rùi nhưng khổ cái tìm kiếm kiểu này kg hiệu quả tí xíu nào. Vì mình nhập từ tìm kiếm thì nó cứ nhắm mắt thấy cái nào có từ giống thì lôi ra. Bây giờ đang nghĩ chắc phải tạo một bảng chứa những từ thông dụng thường gặp rùi dùng php tách chuổi thấy từ nào nằm trong bảng này thì kg tìm, nhưng nếu dùng cách này thì có thể bỏ sót nhiều trường hợp là từ ghép. Mình kg biết MySQL có lệnh nào loại trừ kết quả trong một bảng kg?
Đồ án này của mình mấy cái thứ khác chỉ là phụ cái chính là vụ tìm kiếm này.
Mà mình nghĩ vấn đề này thì hầu như site nào cũng có tìm kiếm chắc kg ít thì nhiều cũng đã giải quyết vấn đề này rồi nhỉ.
Dctran viết 12:33 ngày 10/10/2018
- Bạn nên tìm hiểu về bài toán so mẫu, đó là vấn đề mấu chốt trong tìm kiếm.

- Như vậy nếu dùng PHP thì bạn phải sử dụng các hàm trong M-String để duyệt chuỗi.

- Tôi muốn nói sử dụng LIKE chỉ là 1 trong nhiều modules tìm kiếm của bạn. Càng nhiều lựa chọn tìm kiếm thì chương trình càng được đánh giá cao.

- Vấn đề tìm kiếm ở đây là so mẫu nên phải chấp nhận trường hợp người dùng nhập sai, quan trọng là tìm ra được chuỗi tương tự với từ khóa nhập vào. Ở đây tôi sẽ nói qua về cách cài đặt các thuật toán tìm kiếm theo từ khóa (tức là ko sử dụng hàm LIKE).

1. Tìm kiếm chính xác theo từ khóa: Sử dụng thuật toán so mẫu, có thể dùng KMP hoặc Turbo BM.

2. Tìm kiếm xấp xỉ

A. Tìm kiếm xấp xỉ theo từng từ chính xác: Có thể sử dụng thuật toán so sánh khúc con chung lớn nhất. Cái này có trình bày trong tài liệu của tôi tuy nhiên bạn cũng nên hỏi thầy hướng dẫn thêm các thuật toán giải quyết trường hợp này.

B. Tìm kiếm xấp xỉ tựa ngữ nghĩa: Cho kết quả mềm dẻo hơn cả trong trường hợp người dùng ko nhớ được chính xác từ khóa mà họ cần tìm. Riêng phần này được trình bày rất chi tiết trong tài liệu.

Công việc của bạn là duyệt các bản ghi của database giả sử được tập A = (a1,a2,...,ak), giả sử từ khóa tìm kiếm là K khi đó hãy tính H(a1,K) , H(a2,K) ... được 1 loạt các giá trị H rồi sắp xếp theo chiều giảm của H như vậy sẽ được kết quả giảm dần về mức độ tương tự. Cuối cùng là hiển thị các bản ghi ứng với H theo chiều giảm dần.

Còn nữa là tài liệu, ko hiểu tôi để đâu vẫn chưa tìm ra, nhưng bạn yên tâm vì nếu cần tôi sẽ xin lại từ cô giáo hướng dẫn.
kid08 viết 12:46 ngày 10/10/2018
anh send cho em tài liệu với đc ko, cái tìm kiểm chi tiết này đúng là khoai thật, PHP nếu với các so mẫu thế thì chẳng lẽ ghi hết các rows ra 1 array rồi dùng các hàm về string để check sao ??? MySQL có lệnh nào xử lý string ko nhỉ
Dctran viết 12:47 ngày 10/10/2018
Bài toán so mẫu đã là một bài toán khó, ở đây lại còn so mẫu xấp xỉ nên càng phức tạp hơn. Các hệ CSDL hiện nay nói chung theo tôi được biết thì ngay cả Oracle lẫn MSSQL chưa hỗ trợ sẵn các hàm tìm kiếm dạng xấp xỉ nói trên. Bắt buộc bạn phải duyệt các row rồi áp các hàm xử lý String để ra được kết quả như mong muốn. Nếu bạn cần tài liệu thì gửi địa chỉ email của bạn lên.
kid08 viết 12:38 ngày 10/10/2018
mr.kid08@yahoo.com.vn, thanks anh trước
hungxalo viết 12:38 ngày 10/10/2018
tôi cũng xin 1 bản,
aotuong@gmail.com
thanks bác trước
Bài liên quan
0