如何快速、最优地从文本中提取数组中所有带有字母“ӣ”的单词?
How to quickly and optimally pull out of the text all the words with the letter "ӣ" in the array?
我有简单的文本,我想从文本到数组值中获取所有带有字母“ӣ”的单词。例如我的文字:
$text = "тоҷикӣ барои забони тоҷикӣ ва барои давлати мо ҳамчун забони давлатӣ ба ҳисоб меравад. Дар давлати мо забонҳои ҳориҷӣ ба монанди забони русӣ, англисӣ, ӯзбекӣ ва арабӣ омӯзонида мешаванд.";
如果文本找到带有字母“ӣ”的单词,则将该单词和同一单词右侧的另一个单词添加到数组中。另一个取那个词和左边的另一个词并将其添加到数组中。
大致应该是这样的结果:
$result = array(
"тоҷикӣ барои",
"забони тоҷикӣ",
"тоҷикӣ ва",
"забони давлатӣ",
"давлатӣ ба",
"забонҳои ҳориҷӣ",
"ҳориҷӣ ба",
"забони русӣ",
"русӣ, англисӣ",
"англисӣ, ӯзбекӣ",
"ӯзбекӣ ва",
"ва арабӣ",
"арабӣ омӯзонида"
);
我的代码要爆两个字。我只能拆分一行两个字:
$text = "тоҷикӣ барои забони тоҷикӣ ва барои давлати мо ҳамчун забони давлатӣ ба ҳисоб меравад. Дар давлати мо забонҳои ҳориҷӣ ба монанди забони русӣ, англисӣ, ӯзбекӣ ва арабӣ омӯзонида мешаванд.";
$array = array();
preg_match_all('/([А-Яа-я0-9ҚӢҒҶҲӮқӣғҷҳӯ\.]+(?: [А-Яа-я0-9ҚӢҒҶҲӮқӣғҷҳӯ\.]+)?)/u',$text,$array);
echo"<pre>";
print_r($array);
echo"<pre>";
echo "<hr>";
function array_flatten($array) {
if (!is_array($array)) {
return FALSE;
}
$result = array();
foreach ($array as $key => $value) {
if (is_array($value)) {
$result = array_merge($result, array_flatten($value));
}
else {
$result[$key] = $value;
}
}
return $result;
}
$array = array_flatten($array);
$array = array_filter(array_unique($array));
foreach ($array as $key => $value)
{
if (stripos($value, " ") === false)
{
unset($array[$key]);
}
}
echo"<pre>";
print_r($array);
echo"<pre>";
/* Output
Array
(
[1] => барои забони
[2] => тоҷикӣ ва
[3] => барои давлати
[4] => мо ҳамчун
[5] => забони давлатӣ
[6] => ба ҳисоб
[7] => меравад. Дар
[8] => давлати мо
[9] => забонҳои ҳориҷӣ
[10] => ба монанди
[11] => забони русӣ
[13] => ӯзбекӣ ва
[14] => арабӣ омӯзонида
)
*/
我会先拆分单词,然后使用 array_reduce
检查每一对单词,看看其中是否包含目标字母,如果包含,则在输出中包含该对:
$result = [];
array_reduce(preg_split("~\s+~", $text), function($prev, $word) use (&$result) {
if ($prev && (strpos($prev, "ӣ") !== false || strpos($word, "ӣ") !== false)) {
$result[] = "$prev $word";
}
return $word;
});
对于您的 $text
值,$result
将是:
array (
'тоҷикӣ барои',
'забони тоҷикӣ',
'тоҷикӣ ва',
'забони давлатӣ',
'давлатӣ ба',
'забонҳои ҳориҷӣ',
'ҳориҷӣ ба',
'забони русӣ,',
'русӣ, англисӣ,',
'англисӣ, ӯзбекӣ',
'ӯзбекӣ ва',
'ва арабӣ',
'арабӣ омӯзонида',
)
我有简单的文本,我想从文本到数组值中获取所有带有字母“ӣ”的单词。例如我的文字:
$text = "тоҷикӣ барои забони тоҷикӣ ва барои давлати мо ҳамчун забони давлатӣ ба ҳисоб меравад. Дар давлати мо забонҳои ҳориҷӣ ба монанди забони русӣ, англисӣ, ӯзбекӣ ва арабӣ омӯзонида мешаванд.";
如果文本找到带有字母“ӣ”的单词,则将该单词和同一单词右侧的另一个单词添加到数组中。另一个取那个词和左边的另一个词并将其添加到数组中。 大致应该是这样的结果:
$result = array(
"тоҷикӣ барои",
"забони тоҷикӣ",
"тоҷикӣ ва",
"забони давлатӣ",
"давлатӣ ба",
"забонҳои ҳориҷӣ",
"ҳориҷӣ ба",
"забони русӣ",
"русӣ, англисӣ",
"англисӣ, ӯзбекӣ",
"ӯзбекӣ ва",
"ва арабӣ",
"арабӣ омӯзонида"
);
我的代码要爆两个字。我只能拆分一行两个字:
$text = "тоҷикӣ барои забони тоҷикӣ ва барои давлати мо ҳамчун забони давлатӣ ба ҳисоб меравад. Дар давлати мо забонҳои ҳориҷӣ ба монанди забони русӣ, англисӣ, ӯзбекӣ ва арабӣ омӯзонида мешаванд.";
$array = array();
preg_match_all('/([А-Яа-я0-9ҚӢҒҶҲӮқӣғҷҳӯ\.]+(?: [А-Яа-я0-9ҚӢҒҶҲӮқӣғҷҳӯ\.]+)?)/u',$text,$array);
echo"<pre>";
print_r($array);
echo"<pre>";
echo "<hr>";
function array_flatten($array) {
if (!is_array($array)) {
return FALSE;
}
$result = array();
foreach ($array as $key => $value) {
if (is_array($value)) {
$result = array_merge($result, array_flatten($value));
}
else {
$result[$key] = $value;
}
}
return $result;
}
$array = array_flatten($array);
$array = array_filter(array_unique($array));
foreach ($array as $key => $value)
{
if (stripos($value, " ") === false)
{
unset($array[$key]);
}
}
echo"<pre>";
print_r($array);
echo"<pre>";
/* Output
Array
(
[1] => барои забони
[2] => тоҷикӣ ва
[3] => барои давлати
[4] => мо ҳамчун
[5] => забони давлатӣ
[6] => ба ҳисоб
[7] => меравад. Дар
[8] => давлати мо
[9] => забонҳои ҳориҷӣ
[10] => ба монанди
[11] => забони русӣ
[13] => ӯзбекӣ ва
[14] => арабӣ омӯзонида
)
*/
我会先拆分单词,然后使用 array_reduce
检查每一对单词,看看其中是否包含目标字母,如果包含,则在输出中包含该对:
$result = [];
array_reduce(preg_split("~\s+~", $text), function($prev, $word) use (&$result) {
if ($prev && (strpos($prev, "ӣ") !== false || strpos($word, "ӣ") !== false)) {
$result[] = "$prev $word";
}
return $word;
});
对于您的 $text
值,$result
将是:
array (
'тоҷикӣ барои',
'забони тоҷикӣ',
'тоҷикӣ ва',
'забони давлатӣ',
'давлатӣ ба',
'забонҳои ҳориҷӣ',
'ҳориҷӣ ба',
'забони русӣ,',
'русӣ, англисӣ,',
'англисӣ, ӯзбекӣ',
'ӯзбекӣ ва',
'ва арабӣ',
'арабӣ омӯзонида',
)