Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 127 additions & 0 deletions reference/intl/grapheme/grapheme-levenshtein.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<refentry xml:id="function.grapheme-levenshtein" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>grapheme_levenshtein</refname>
<refpurpose>Calculate Levenshtein distance between two grapheme clusters</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>int</type><methodname>grapheme_levenshtein</methodname>
<methodparam><type>string</type><parameter>string1</parameter></methodparam>
<methodparam><type>string</type><parameter>string2</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>insertion_cost</parameter><initializer>1</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>replacement_cost</parameter><initializer>1</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>deletion_cost</parameter><initializer>1</initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter>locale</parameter><initializer>""</initializer></methodparam>
</methodsynopsis>
<simpara>
The Levenshtein distance is defined as the minimal number of
grapheme cluster you have to replace, insert or delete to transform
<parameter>string1</parameter> into <parameter>string2</parameter>.
The complexity of the algorithm is <literal>O(m*n)</literal>,
where <literal>n</literal> and <literal>m</literal> are the
length of <parameter>string1</parameter> and
<parameter>string2</parameter>.
</simpara>
<simpara>
If <parameter>insertion_cost</parameter>, <parameter>replacement_cost</parameter>
and/or <parameter>deletion_cost</parameter> are unequal to <literal>1</literal>,
the algorithm adapts to choose the cheapest transforms.
E.g. if <code>$insertion_cost + $deletion_cost &lt; $replacement_cost</code>,
no replacements will be done, but rather inserts and deletions instead.
</simpara>
</refsect1>

<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>string1</parameter></term>
<listitem>
<para>
One of the grapheme clusters being evaluated for Levenshtein distance.
<parameter>string1</parameter> must be valid UTF-8.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>string2</parameter></term>
<listitem>
<para>
One of the grapheme clusters being evaluated for Levenshtein distance.
<parameter>string2</parameter> must be valid UTF-8.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>insertion_cost</parameter></term>
<listitem>
<para>
Defines the cost of insertion.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>replacement_cost</parameter></term>
<listitem>
<para>
Defines the cost of replacement.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>deletion_cost</parameter></term>
<listitem>
<para>
Defines the cost of deletion.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>locale</parameter></term>
<listitem>
<para>
Specifies a locale based on <link xlink:href="&uri.unicode.ldml;">LDML</link>.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>

<refsect1 role="returnvalues">
&reftitle.returnvalues;
<simpara>
This function returns the Levenshtein-Distance between the
two argument grapheme clusters.
</simpara>
</refsect1>

<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
<member><function>levenshtein</function></member>
</simplelist>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
Loading