Customnormalize
=================

对输入字符串进行一系列自定义的文本标准化处理。

该算子按顺序执行以下操作：
1.  将所有大写字母转换为小写字母。
2.  去除字符串首尾的空白字符 (space, ``\t``, ``\n``, ``\v``, ``\f``, ``\r``)。
3.  删除字符串中预定义的一组标点符号 (例如 ``.*()\"``)。
4.  标准化缩写词，例如，将 ``we 're`` 转换为 ``we're``。
5.  展开常见的英文缩写词 (例如, ``n't`` -> `` not``, ``'ll`` -> `` will``, ``i'm`` -> ``i am`` 等)。
6.  标准化问号和感叹号，例如合并连续的符号 (``!!!`` -> ``!``) 并在符号和单词之间添加空格 (``Hello?`` -> ``Hello ?``)。
7.  去除字符串首尾预定义的另一组字符 (例如 ``[\\s,:;\\-&'\"]+``)。
8.  再次去除字符串首尾的空白字符。
9.  如果处理后的字符串长度超过300个字符，则将其截断为300个字符。
10. 在字符串首部添加前缀 ``<S> ``，尾部添加后缀 `` <E>``。

输入：
   - **str** - 输入字符串的地址。
   - **str_len** - 输入字符串的长度。
   - **tmp_str** - 用于中间计算的临时缓冲区的地址，其大小应足以容纳处理过程中的字符串。
   - **params** - 一个 ``long long`` 类型的数组，其中每个元素是指向标准化操作所需的配置字符串或参数的指针。
   - **core_mask** - 核掩码 (仅共享存储版本需要)。

输出：
   - **result** - 存储标准化后字符串的输出缓冲区的地址。
   - **result_len** - 指向一个 ``int`` 变量的指针，用于存储结果字符串的长度。

支持平台：
   ``FT78NE``
   ``MT7004``

.. note::
    - 该算子不区分数据类型
     
**共享存储版本:**

.. c:function:: void customnormalize_s(char *str, int str_len, char *result, int *result_len, char *tmp_str, long long *params, int core_mask)

**C调用示例：**

.. code-block:: c
   :linenos:
   :emphasize-lines: 14

   #include <stdio.h>
   #include <string.h>
   #include "customnormalize.h"

   int main() {
       char *str = (char *)0xA0000000;         // str in DDR
       char *result = (char *)0xB0000000;      // result in DDR
       char *tmp_str = (char *)0xC0000000;     // tmp_str in DDR
       int str_len = 50; // 假设长度
       int result_len = 0;
       long long params[20]; // 假设参数已填充
       int core_mask = 0xff;

       customnormalize_s(str, str_len, result, &result_len, tmp_str, params, core_mask);

       return 0;
   }

**私有存储版本:**

.. c:function:: void customnormalize_p(char *str, int str_len, char *result, int *result_len, char *tmp_str, long long *params)

**C调用示例：**

.. code-block:: c
   :linenos:
   :emphasize-lines: 13

   #include <stdio.h>
   #include <string.h>
   #include "customnormalize.h"

   int main() {
       char *str = (char *)0x10000000;         // str in L2
       char *result = (char *)0x10001000;      // result in L2
       char *tmp_str = (char *)0x10002000;     // tmp_str in L2
       int str_len = 50; // 假设长度
       int result_len = 0;
       long long params[20]; // 假设参数已填充

       customnormalize_p(str, str_len, result, &result_len, tmp_str, params);

       return 0;
   }
