تقبل محولات الطاقة Levenshtein مصطلح استعلام وتقوم بإرجاع جميع المصطلحات الموجودة في القاموس التي لا تحتوي على عدد من الأخطاء الإملائية. إنها تشكل فئة عالية الكفاءة (المكان والزمان ) من مصححات الإملاء التي تعمل بشكل جيد للغاية عندما لا تحتاج إلى سياق أثناء تقديم الاقتراحات. لا داعي لإجراء مسح خطي على القاموس الخاص بك للعثور على جميع المصطلحات القريبة بما فيه الكفاية من استعلام المستخدم، وذلك باستخدام التنفيذ التربيعي لمسافة Levenshtein أو مسافة Damerau-Levenshtein، حيث يجد هؤلاء الأطفال جميع المصطلحات من القاموس الخاص بك في الوقت الخطي على طول مصطلح الاستعلام (ليس على حجم القاموس، على طول مصطلح الاستعلام).
إذا كنت بحاجة إلى سياق، فخذ المرشحين الذين تم إنشاؤهم بواسطة محول الطاقة كنقطة بداية، وقم بتوصيلهم بأي نموذج تستخدمه للسياق (على سبيل المثال، عن طريق تحديد تسلسل المصطلحات التي لديها أكبر احتمال للظهور معًا).
للحصول على عرض توضيحي سريع، يرجى زيارة صفحة Github هنا. هناك أيضًا واجهة سطر أوامر، liblevenshtein-Java-cli. الرجاء مراجعة README.md الخاص به للحصول على معلومات الاستخدام والاقتناء.
المكتبة مكتوبة حاليًا بلغة Java وCoffeeScript وJavaScript، لكنني سأقوم بنقلها إلى لغات أخرى قريبًا. إذا كانت لديك لغة معينة ترغب في رؤيتها بها، أو نظام إدارة الحزم الذي ترغب في نشره عليه، فأخبرني بذلك.
فرع | وصف |
---|---|
يتقن | الأحدث، مصدر التطوير |
يطلق | الأحدث، مصدر الإصدار |
الإصدار-3.x | الأحدث، مصدر الإصدار للإصدار 3.x |
الإصدار-2.x | الأحدث، مصدر الإصدار للإصدار 2.x |
تتم إدارة المشكلات على waffle.io. ستجد أدناه رسمًا بيانيًا للمعدل الذي قمت بإغلاقه به.
يرجى زيارة Bountysource للتعهد بدعمكم للقضايا المستمرة.
عندما يتعلق الأمر بالوثائق، لديك عدة خيارات:
ويكي
جافادوك
كود المصدر
تم تطوير liblevenshtein ضد Java ≥ 1.8. ولن يعمل مع الإصدارات السابقة.
أضف تبعية Maven إلى Artifactory. على سبيل المثال، في مشروع Gradle، يمكنك تعديل repositories
على النحو التالي:
المستودعات { مخضرم { عنوان URL "https://oss.jfrog.org/artifactory/oss-release-local" } }
أضف تبعية Maven إلى أحد الإجراءات التالية:
مافين سنترال
جي سنتر
بينتراي
<التبعية> <groupId>com.github.universal-automata</groupId> <artifactId>liblevenshtein</artifactId> <الإصدار>3.0.0</الإصدار> </التبعية>
'com.github.universal-automata:liblevenshtein:jar:3.0.0'
<dependency org="com.github.universal-automata" name="liblevenshtein" rev="3.0.0" />
@العنب( @Grab(group='com.github.universal-automata', الوحدة='liblevenshtein', الإصدار='3.0.0') )
ترجمة "com.github.universal-automata:liblevenshtein:3.0.0"
LibraryDependeency += "com.github.universal-automata" % "liblevenshtein" % "3.0.0"
[com.github.universal-automata/liblevenshtein "3.0.0"]
% git clone --progress [email protected]:universal-automata/liblevenshtein-java.git Cloning into 'liblevenshtein-java'... remote: Counting objects: 8117, done. remote: Compressing objects: 100% (472/472), done. remote: Total 8117 (delta 352), reused 0 (delta 0), pack-reused 7619 Receiving objects: 100% (8117/8117), 5.52 MiB | 289.00 KiB/s, done. Resolving deltas: 100% (5366/5366), done. Checking connectivity... done. % cd liblevenshtein-java % git pull --progress Already up-to-date. % git fetch --progress --tags % git checkout --progress 3.0.0 Note: checking out '3.0.0'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at 4f0f172... pushd and popd silently % git submodule init % git submodule update
لنفترض أن لديك المحتوى التالي في ملف نصي عادي يسمى، top-20-most-common-english-words.txt (لاحظ أن الملف يحتوي على مصطلح واحد في كل سطر):
the be to of and a in that have I it for not on with he as you do at
يوفر لك ما يلي طريقة للاستعلام عن محتواه:
import java.io.InputStream;import java.io.OutputStream;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;import com.github.liblevenshtein.collection. Dictionary.SortedDawg;import com.github.liblevenshtein.serialization.PlainTextSerializer;import com.github.liblevenshtein.serialization.ProtobufSerializer;import com.github.liblevenshtein.serialization.Serializer;import com.github.liblevenshtein.transducer.Algorithm;import com.github.liblevenshtein.transducer.Candidate;import com.github.liblevenshtein.transducer.ITransducer;import com.github.liblevenshtein.transducer.factory.TransducerBuilder;// ... قاموس SortedDawg النهائي;المسار النهائي DictionaryPath = Paths.get("/path/to/top-20-most-common-english-words.txt");try (final InputStreamstream = Files.newInputStream(dictionaryPath)) { // يقبل مُنشئ PlainTextSerializer التحديد المنطقي الاختياري // ما إذا كان القاموس مُرتّبًا بالفعل معجميًا، تصاعديًا // طلب. إذا تم فرزها، فإن المرور الصحيح سيؤدي إلى تحسين البناء // القاموس؛ يمكنك تمرير خطأ سواء تم فرز القاموس أو // ليس (هذا هو السلوك الافتراضي والأكثر أمانًا إذا كنت لا تعرف ما إذا كان // تم فرز القاموس). Final Serializer serializer = new PlainTextSerializer(false); القاموس = serializer.deserialize(SortedDawg.class,stream); }محول ITransducer<Candidate> النهائي = TransducerBuilder() الجديد .قاموس (قاموس) .الخوارزمية (الخوارزمية. النقل) .defaultMaxDistance(2) .includeDistance(صحيح) .build();for (final String queryTerm : new String[] {"foo", "bar"}) { System.out.println("+---------------- -------------------------------------------------- -------------"); System.out.printf("| المرشحين للتهجئة لمصطلح الاستعلام: "%s"%n"، queryTerm); System.out.println("+------------------------------------------ -------------------------------------"); for (مرشح المرشح النهائي: transducer.transduce(queryTerm)) {System.out.printf("| d("%s", "%s") = [%d]%n", queryTerm,مرشح.term() ، المرشح. المسافة ())؛ } }// +--------------------------------------------- -/-------------------------------- | المرشحين الإملائيين لمصطلح الاستعلام: "foo"// +-------------------------------------- -----------------------------------------// | d("foo", "do") = [2]// | d("foo", "of") = [2]// | d("foo", "on") = [2]// | d("foo", "to") = [2]// | d("foo", "for") = [1]// | d("foo", "not") = [2]// | d("foo"، "أنت") = [2]// +--------------------------------- ----------------------------------------------// | المرشحين الإملائيين لمصطلح الاستعلام: "bar"// +-------------------------------------- -----------------------------------------// | d("bar"، "a") = [2]// | d("bar"، "as") = [2]// | d("bar"، "at") = [2]// | d("bar"، "be") = [2]// | د("شريط"، "ل") = [2]// ...
إذا كنت تريد إجراء تسلسل لقاموسك بتنسيق يسهل قراءته لاحقًا، فقم بما يلي:
المسار النهائي serializedDictionaryPath = Paths.get("/path/to/top-20-most-common-english-words.protobuf.bytes");try (final OutputStreamstream = Files.newOutputStream(serializedDictionaryPath)) { Final Serializer serializer = new ProtobufSerializer(); serializer.serialize(قاموس، تيار)؛ }
بعد ذلك، يمكنك قراءة القاموس لاحقًا، بنفس الطريقة التي تقرأ بها نسخة النص العادي:
Final SortedDawg deserializedDictionary;try (final InputStreamstream = Files.newInputStream(serializedDictionaryPath)) { Final Serializer serializer = new ProtobufSerializer(); deserializedDictionary = serializer.deserialize(SortedDawg.class,stream); }
لا يقتصر التسلسل على القواميس، يمكنك أيضًا (إلغاء) تسلسل محولات الطاقة.
يرجى الاطلاع على الويكي لمزيد من التفاصيل.
تعتمد هذه المكتبة إلى حد كبير على أعمال ستويان ميهوف، وكلاوس شولتز، وبيتار نيكولاييف ميتانكين: تصحيح السلسلة السريعة باستخدام ليفنشتين-أوتوماتا. لمزيد من المعلومات، يرجى الاطلاع على الويكي.
تتم صيانة liblevenshtein-Java بواسطة@dylon ([email protected])