咨询:PHP实现UTF-8俄语文本词频统计并返回JSON的方案
PHP处理UTF-8俄语文本的单词统计方案
原生PHP实现(无需第三方库)
PHP自带的mbstring扩展(默认已启用)就能完美处理UTF-8编码的俄语西里尔文,完全不需要额外第三方库。核心是用多字节字符串函数替代原生ASCII专属函数,具体步骤如下:
- 读取UTF-8文件:直接用
file_get_contents读取,确保文件本身是UTF-8编码。 - 文本预处理:去除所有非西里尔文的标点、符号(包括省略号),统一转小写避免大小写导致的重复统计。
- 分割单词:按空白字符分割文本为单词数组。
- 统计词频:用
array_count_values快速统计每个单词的出现次数。 - 输出JSON:用
json_encode输出结果,开启JSON_UNESCAPED_UNICODE参数保留西里尔文原样。
代码示例
<?php // 读取目标俄语文件 $content = file_get_contents('russian_text.txt'); if (!$content) { die("文件读取失败"); } // 预处理文本:转小写、清理非西里尔字符、合并连续空格 $cleanContent = mb_strtolower($content, 'UTF-8'); $cleanContent = preg_replace('/[^\p{Cyrillic}\d\s]/u', ' ', $cleanContent); $cleanContent = preg_replace('/\s+/u', ' ', trim($cleanContent)); // 分割为单词数组 $words = preg_split('/\s/u', $cleanContent, -1, PREG_SPLIT_NO_EMPTY); // 统计词频并输出JSON $wordCounts = array_count_values($words); header('Content-Type: application/json; charset=utf-8'); echo json_encode($wordCounts, JSON_UNESCAPED_UNICODE); ?>
第三方库推荐
如果需要更复杂的文本处理(比如词干提取、停用词过滤),可以考虑以下成熟库:
- Symfony String Component:提供专业的Unicode字符串处理工具,支持多语言文本的大小写转换、分割、清理等操作,完全兼容UTF-8。通过Composer安装:
composer require symfony/string - PHP Intl扩展:虽为PHP内置扩展,但提供了国际化文本处理的高级功能,比如基于Unicode标准的字符分类、正则匹配,能更精准处理多语言文本细节。
Symfony String示例片段
<?php require 'vendor/autoload.php'; use Symfony\Component\String\UnicodeString; $content = file_get_contents('russian_text.txt'); $unicodeStr = new UnicodeString($content); // 转小写、清理标点、分割单词 $words = $unicodeStr->lower()->replaceMatches('/[^\p{Cyrillic}\d\s]/u', ' ') ->trim()->split('/\s+/'); // 手动统计词频 $wordCounts = []; foreach ($words as $word) { $wordStr = (string)$word; $wordCounts[$wordStr] = isset($wordCounts[$wordStr]) ? $wordCounts[$wordStr] + 1 : 1; } echo json_encode($wordCounts, JSON_UNESCAPED_UNICODE); ?>
内容的提问来源于stack exchange,提问作者Mothilal Nehru
相关产品推荐
相关产品推荐

