البحث العادي يعامل «مذكرة» و«للمذكرة» و«بالمُذَكِّرة» كأنها كلمات مختلفة، فيضيع نص موجود قدامك. «بحث عربي ذكي» مكتبة Swift وPython وJavaScript تتجاهل التشكيل، وتوحّد الهمزات والألف والتاء المربوطة، وتلقى الكلمة ورا السوابق الملتصقة مثل ال ولل وبال وو وب. وهي نفس البحث اللي يشغّل dovmem.
Plain search treats «مذكرة», «للمذكرة» and «بالمُذَكِّرة» as different words, so text that is right there gets missed. Arabic Search is a Swift, Python and JavaScript library that ignores diacritics, unifies hamza, alef and taa marbuta forms, and finds words behind attached prefixes like ال, لل, بال, و and ب. It is the same search that powers dovmem.
نفس الـ20 جملة في جدولين SQLite FTS5: واحد بالبحث العادي، وواحد بـ«بحث عربي ذكي».
The same 20 sentences in two SQLite FTS5 tables: one with plain search, one with Arabic Search.
التجربة هنا تشتغل على سيرفرنا عشان الصفحة بس. المكتبة نفسها تشتغل داخل تطبيقك بدون إنترنت.
This demo runs on our server for this page only. The library itself runs inside your app, offline.
أمثلة توضيحية لطريقة المطابقة. وليش يصير كذا؟ اقرأ المقال: ليش البحث العربي في SQLite ما يلقى الكلمة.
Illustrative examples of how matching works. Why does this happen? Read: why Arabic search in SQLite misses words.
| تبحث عن | البحث العادي يفوّت | بحث عربي ذكي يلقى |
|---|---|---|
| مذكرة | للمذكرة، بالمُذَكِّرة، والمذكره | للمذكرة، بالمُذَكِّرة، والمذكره |
| أحمد | احمد، إحمد | احمد، إحمد |
| مستشفى | مستشفي، بالمستشفى، وللمستشفى | مستشفي، بالمستشفى، وللمستشفى |
| مشروع | بمشروع، ومشروع | بمشروع، ومشروع |
| سؤال | سوال، السؤال | سوال، السؤال |
| You search for | Plain search misses | Arabic Search finds |
|---|---|---|
| مذكرة | للمذكرة، بالمُذَكِّرة، والمذكره | للمذكرة، بالمُذَكِّرة، والمذكره |
| أحمد | احمد، إحمد | احمد، إحمد |
| مستشفى | مستشفي، بالمستشفى، وللمستشفى | مستشفي، بالمستشفى، وللمستشفى |
| مشروع | بمشروع، ومشروع | بمشروع، ومشروع |
| سؤال | سوال، السؤال | سوال، السؤال |
مثال مختصر. التفاصيل الكاملة في التوثيق اللي يجي مع المكتبة.
A short example. Full details are in the docs that come with the library.
import ArabicSearch
// النص اللي تحفظه في عمود FTS5، وجملة البحث
let stored = ArabicSearch.indexText("راجعت بالمُذَكِّرة أمس")
let match = ArabicSearch.ftsMatch("مذكرة") // WHERE t MATCH ?
let s = ArabicSearch.snippet("راجعت بالمُذَكِّرة أمس", query: "مذكرة")
// s.highlights ← «بالمُذَكِّرة»import sqlite3, arabic_search as ar
db = sqlite3.connect("notes.sqlite")
ar.create_fts_table(db) # SQLite FTS5
ar.index_row(db, 1, "راجعت بالمُذَكِّرة أمس")
print(ar.search(db, "مذكرة")) # [1]
print(ar.snippet("راجعت بالمُذَكِّرة أمس", "مذكرة").highlights)import { MemoryIndex } from "arabic-search-js/memory"; // في المتصفح
import { ftsMatch } from "arabic-search-js"; // مع قاعدة البيانات
const index = new MemoryIndex();
index.add(1, "راجعت بالمُذَكِّرة أمس");
index.search("مذكرة"); // [1]
ftsMatch("مذكرة"); // WHERE t MATCH ?$29
مكتبات Swift وPython وJavaScript، مع الاختبارات والتوثيق.
The Swift, Python and JavaScript libraries, with tests and docs.
قريبًا. الشراء بيفتح هنا أول ما تجهز.
Coming soon. Checkout opens here when it is ready.
تبي توحيد النص بس (التشكيل والهمزات والتاء المربوطة)؟ فيه نسخة مجانية مفتوحة المصدر برخصة MIT: arabic-search-lite على GitHub.
Only need normalization (diacritics, hamza, taa marbuta)? There is a free MIT version: arabic-search-lite on GitHub.
لا. كل شي يشتغل داخل تطبيقك: ما فيه طلبات شبكة ولا خدمة خارجية.
No. Everything runs inside your app, with no network requests and no outside service.
الفهرس الجاهز مبني على SQLite FTS5، لكن دوال التوحيد وفصل السوابق تقدر تستخدمها لحالها مع أي محرك بحث.
The ready index is built on SQLite FTS5, but the normalization and prefix functions can be used on their own with any search engine.
لا. النص الإنجليزي والأرقام يتبحث فيهم مثل العادة، والمعالجة العربية تشتغل على الكلمات العربية بس.
No. English text and numbers are searched as usual; the Arabic handling only applies to Arabic words.
إيه. أي كلمة في البحث تكفي بدايتها، فـ«التخ» تلقى «بمشروع التخرج»، ومع فصل السوابق بعد.
Yes. The start of each word is enough, so «التخ» finds «بمشروع التخرج», prefixes included.