从字符串中提取阿拉伯语单词(不是语义阿拉伯语短语)
Extracting Arabic words(not semantic arabic phrases) from a string
String description="Big data is a broad term for data sets so large or complex that traditional data processing applications are inadequate. البيانات الضخمة هي عبارة عن مجموعة من مجموعة البيانات الضخمة جداً والمعقدة لدرجة أنه يُصبح من الصعب معالجتها باستخدام أداة واحدة فقط من أدوات إدارة قواعد البيانات أو باستخدام تطبيقات معالجة البيانات التقليدية. "
我需要一个正则表达式来仅提取阿拉伯语单词。
我检查了 this ticket,但是,它是一张 PHP 票,而我需要 JAVA 正则表达式。
import java.util.regex.*;
Pattern p = Pattern.compile("#(?:[\x{0600}-\x{06FF}]+(?:\s+[\x{0600}-\x{06FF}]+)*)#u");
print(p.matcher(description).group(1));
它引发了一个错误。
要查找一个或多个阿拉伯字符,您可以使用 \p{InArabic}+
这个class没有直接被Pattern documentation提到,但是它给了我们关于
的信息
Classes for Unicode scripts, blocks, categories and binary properties
\p{IsLatin}
A Latin script character (script)
\p{InGreek}
A character in the Greek block (block)
\p{Lu}
An uppercase letter (category)
\p{IsAlphabetic}
An alphabetic character (binary property)
并受到 \p{InGreek}
示例的鼓舞,我们可以开始阅读有关块的内容,以发现
Blocks are specified with the prefix In
, as in InMongolian
, or by using the keyword block
(or its short form blk
) as in block=Mongolian
or blk=Mongolian
.
The block names supported by Pattern
are the valid block names accepted and defined by UnicodeBlock.forName
.
最后一句话对我们来说最重要。现在我们需要看看 UnicodeBlocks
是否应该支持阿拉伯字符组。所以我们访问它的 documentation 在那里我们可以找到字段
public static final Character.UnicodeBlock ARABIC
这表明支持阿拉伯字符块。
因此,要查找单个阿拉伯语单词,您的代码可以如下所示:
String description="Big data is a broad term for data sets so large or complex that traditional data processing applications are inadequate. البيانات الضخمة هي عبارة عن مجموعة من مجموعة البيانات الضخمة جداً والمعقدة لدرجة أنه يُصبح من الصعب معالجتها باستخدام أداة واحدة فقط من أدوات إدارة قواعد البيانات أو باستخدام تطبيقات معالجة البيانات التقليدية. ";
Pattern p = Pattern.compile("\p{InArabic}+";
Matcher m = p.matcher(description);
while(m.find()){
System.out.println(m.group());
}
输出:
البيانات
الضخمة
هي
.
.
.
البيانات
التقليدية
如果您想查找由一个或多个空格分隔的阿拉伯语单词组,您可以使用此模式
Pattern p = Pattern.compile("\p{InArabic}+(?:\s+\p{InArabic}+)*");
你可能想知道*
- 代表零个或多个,+
- 一个或多个
所以这个正则表达式的意思是
\p{InArabic}+ # one or more Arabic characters (Arabic word)
(?: # non-capturing group storing:
\s+ # one or more whitespace characters
\p{InArabic}+ # with another Arabic word after it
)* # zero or more times
String description="Big data is a broad term for data sets so large or complex that traditional data processing applications are inadequate. البيانات الضخمة هي عبارة عن مجموعة من مجموعة البيانات الضخمة جداً والمعقدة لدرجة أنه يُصبح من الصعب معالجتها باستخدام أداة واحدة فقط من أدوات إدارة قواعد البيانات أو باستخدام تطبيقات معالجة البيانات التقليدية. "
我需要一个正则表达式来仅提取阿拉伯语单词。
我检查了 this ticket,但是,它是一张 PHP 票,而我需要 JAVA 正则表达式。
import java.util.regex.*;
Pattern p = Pattern.compile("#(?:[\x{0600}-\x{06FF}]+(?:\s+[\x{0600}-\x{06FF}]+)*)#u");
print(p.matcher(description).group(1));
它引发了一个错误。
要查找一个或多个阿拉伯字符,您可以使用 \p{InArabic}+
这个class没有直接被Pattern documentation提到,但是它给了我们关于
的信息Classes for Unicode scripts, blocks, categories and binary properties
\p{IsLatin}
A Latin script character (script)
\p{InGreek}
A character in the Greek block (block)
\p{Lu}
An uppercase letter (category)
\p{IsAlphabetic}
An alphabetic character (binary property)
并受到 \p{InGreek}
示例的鼓舞,我们可以开始阅读有关块的内容,以发现
Blocks are specified with the prefix
In
, as inInMongolian
, or by using the keywordblock
(or its short formblk
) as inblock=Mongolian
orblk=Mongolian
.The block names supported by
Pattern
are the valid block names accepted and defined byUnicodeBlock.forName
.
最后一句话对我们来说最重要。现在我们需要看看 UnicodeBlocks
是否应该支持阿拉伯字符组。所以我们访问它的 documentation 在那里我们可以找到字段
public static final Character.UnicodeBlock ARABIC
这表明支持阿拉伯字符块。
因此,要查找单个阿拉伯语单词,您的代码可以如下所示:
String description="Big data is a broad term for data sets so large or complex that traditional data processing applications are inadequate. البيانات الضخمة هي عبارة عن مجموعة من مجموعة البيانات الضخمة جداً والمعقدة لدرجة أنه يُصبح من الصعب معالجتها باستخدام أداة واحدة فقط من أدوات إدارة قواعد البيانات أو باستخدام تطبيقات معالجة البيانات التقليدية. ";
Pattern p = Pattern.compile("\p{InArabic}+";
Matcher m = p.matcher(description);
while(m.find()){
System.out.println(m.group());
}
输出:
البيانات
الضخمة
هي
.
.
.
البيانات
التقليدية
如果您想查找由一个或多个空格分隔的阿拉伯语单词组,您可以使用此模式
Pattern p = Pattern.compile("\p{InArabic}+(?:\s+\p{InArabic}+)*");
你可能想知道*
- 代表零个或多个,+
- 一个或多个
所以这个正则表达式的意思是
\p{InArabic}+ # one or more Arabic characters (Arabic word)
(?: # non-capturing group storing:
\s+ # one or more whitespace characters
\p{InArabic}+ # with another Arabic word after it
)* # zero or more times