深入解析:【Wolfram语言】11 字符串和文本
11 字符串和文本
词汇表
| 表达式 | 说明 |
|---|---|
"string" | 一个字符串 |
StringLength["string"] | 字符串长度 |
StringReverse["string"] | 反转字符串 |
StringTake["string",4] | 取字符串开头的字符 |
StringJoin["string","string"] | 连接字符串 |
StringJoin[{"string","string"}] | 连接字符串列表 |
ToUpperCase["string"] | 转大写 |
Characters["string"] | 将字符串转为字符列表 |
TextWords["string"] | 从字符串提取单词列表 |
TextSentences["string"] | 将字符串分割为句子 |
WikipediaData["topic"] | 获取某主题的维基百科条目 |
WordCloud["text"] | 基于词频生成词云 |
WordList[] | 常用英语单词列表 |
Alphabet[] | 字母表列表 |
LetterNumber["c"] | 字母在字母表中的位置 |
FromLetterNumber[n] | 返回字母表中对应位置的字母 |
Transliterate["text"] | 把任意语言的文本转写为英文字母 |
Transliterate["text","alphabet"] | 将文本转写为其它字母表 |
RomanNumeral[n] | 将数字转换为其罗马数字字符串 |
IntegerName[n] | 将数字转换为英文名称字符串 |
InputForm["string"] | 以输入形式显示字符串(含引号) |
Rasterize["string"] | 生成位图 |
Wolfram 语言可以处理文本。
字符串
文本以字符串形式输入,用双引号 (" ") 表示。
输入一个字符串:
In[]:="This is a string."
Out[]=This is a string.
像输入数字一样,单独的字符串会原样返回——只是显示时引号不可见。
注
字符串中的字符可以是你电脑上能输入的任何内容,包括表情符号(emoji)。
字符串长度
StringLength 函数计算字符串中的字符数,返回字符串长度。
In[]:=StringLength["hello"]
Out[]=5
字符串反转
StringReverse 函数反转字符串中的字符:
In[]:=StringReverse["hello"]
Out[]=olleh
转大小写
ToUpperCase 函数将字符串中的字符转换为大写:
In[]:=ToUpperCase["I'm writing in the Wolfram Language!"]
Out[]=I'M WRITING IN THE WOLFRAM LANGUAGE!
对应ToLowerCase 函数转小写。
提取字符串
StringTake 从字符串开头提取n个字符,返回字符串长度为n:
In[]:=StringTake["this is about strings", 10]
Out[]=this is ab
字符串连接
StringJoin 连接字符串:
In[]:=StringJoin["Hello", " ", "there!", " How are you?"]
Out[]=Hello there! How are you?
注
如果需要分隔单词不要忘记头/尾空格
文本列表
字符串列表
可以创建字符串列表,然后对它们应用函数。
将StringTake函数应用于字符串列表,从每个字符串取前两个字符:
In[]:=StringTake[{"apple", "banana", "strawberry"}, 2]
Out[]={"ap", "ba", "st"}
StringJoin 函数可以连接列表中的字符串:
In[]:=StringJoin[{"apple,", " banana,", " strawberry"}]
Out[]=apple, banana, strawberry
字符列表
回顾在列表运算一章中介绍了将整数拆分为数字列表。
同样可以把字符串拆成字符列表 ,即长度为 1 的字符串。
Characters 将字符串分解为字符列表:
In[]:=Characters["wolfram"]
Out[]={"w", "o", "l", "f", "r", "a", "m"}
一旦把字符串拆成字符列表,就可以使用所有常见的列表函数。
使用Sort函数对字符排序:
In[]:=Sort[Characters["a string of characters"]]

列表开头不可见的元素是空格字符。
如果你想看到像输入时那样带引号的字符串,使用 InputForm。
InputForm 以输入形式显示字符串,包括引号:
In[13]:=InputForm[Sort[Characters["a string of characters"]]]
文本函数
文本函数用于处理有意义的文本。
单词列表
TextWords 函数返回文本字符串中的单词列表:
In[]:=TextWords["This is a sentence. Sentences are made of words."]
Out[]={This, is, a, sentence, Sentences, are, made, of, words}
嵌套使用会给出每个单词的长度:
In[]:=StringLength[
TextWords["This is a sentence. Sentences are made of words."]]
Out[]={4, 2, 1, 8, 9, 3, 4, 2, 5}
句子列表
TextSentences 函数将文本字符串分割为句子列表:
In[]:=TextSentences["This is a sentence. Sentences are made of words."]
Out[]={This is a sentence., Sentences are made of words.}
文本导入
有许多方法可以把文本导入 Wolfram 语言。
例如 WikipediaData 函数可以获取维基百科文章的当前文本。
获取“computers”条目的前 100 个字符:
In[]:=StringTake[WikipediaData["computers"], 100]

词云
创建词云是快速了解文本内容的便捷方法。
函数 WordCloud 可用于此。
为“computers”维基百科文章创建词云:
In[]:=WordCloud[WikipediaData["computers"]]

“computer” 和 “computers” 是文章中最常见的词。
单词列表
Wolfram 语言 对英语和其他语言中出现的词有大量内置知识。WordList 返回单词列表。
常用英语单词列表长度:
In[]:=Length[WordList[]
Out[]=39176
长度代表了这个词表中的单词个数,可以看出这个内置词表还是相当大的。
生成单词列表首字母词云:
In[]:=WordCloud[StringTake[WordList[], 1]]

可以看出S开头的英语单词是最多的。
英语单词中结尾哪个字母最多?
通过字符串反转函数实现。
In[]:=WordCloud[StringTake[StringReverse[WordList[]],1]]

以y和e结尾的单词是最多的。
所有单词中哪个字母最多?
In[]:=WordCloud[Characters[StringJoin[WordList[]]]]

英语单词中哪个字母出现最多,你找到了吗。
字符串转换
字符串可以用非文本生成。
罗马数字
例如,我们可以将罗马数字作为字符串生成。
生成 2025 的罗马数字字符串:
In[]:=RomanNumeral[2025]
Out[]=MMXXV
生成 1 到 12的罗马数字表:
In[]:=Table[RomanNumeral[n], {n, 12}]

整数名称
IntegerName 给出整数的英文名称。
生成整数 2025的名称字符串:
In[]:=IntegerName[2025]
Out[]= 2 thousand 25
字母数字互转
有多种方式将字母与数字互转。
字母表
Alphabet 返回字母表,默认英语:
In[]:=Alphabet[]

Alphabet 可指定非英语字母表:
In[]:=Alphabet["Greek"]

字面翻译
Transliterate函数将任意字母转写为英语字母
In[]:=Transliterate[Alphabet["Greek"]]

字母位置
LetterNumber 告诉字母在字母表中的位置:
In[]:=LetterNumber[{"w", "o", "l", "f", "r", "a", "m"}]
Out[]={23, 15, 12, 6, 18, 1, 13}
FromLetterNumber 做相反的操作:
In[]:=FromLetterNumber[{10, 11, 12, 13, 14, 15}]
Out[]={j, k, l, m, n, o}
文本栅格化
如果需要,你也可以把文本变成图像,然后使用图像处理对其进行操作。
函数 Rasterize 会把某物做成光栅(位图)。
生成一段文本的图像:
In[]:=Rasterize[Style["午", 80]]

对其进行图像处理:
In[]:=EdgeDetect[Rasterize[Style["午", 80]]]

浙公网安备 33010602011771号