我有一组乳胶格式的输入段落。我想用它们制作一袋单词。
举一组看起来像这样的人:
"Some guy did something with emph{ yikes } $ epsilon $"
我想推出一本字典:
{
"Some": 40,
...
"yikes": 10
"epsilon (or unicode for it)": 3
}
也就是说,我需要一本字典,其中的关键字集是所有段落中的单词/符号/方程集(为了简洁起见,我会称之为所有这些单词),以及它们在所有段落中出现的次数。
从给定的单词的k阶元组开始,我需要每个段落的k数组,其中数组中的第I个元素表示该段落中第I个元组中单词的计数。
所以说(Some, dunk, yikes, epsilon)
会给我CCD_ 2。
我已经尝试过使用lexer来获取令牌并直接处理令牌。这很困难而且容易出错,更不用说速度慢了。有没有更好的策略或工具可以做到这一点?
有一些特殊字符的拐角情况需要考虑:
G""odel => Gödel
例如。我想保存这些。
此外,我想把方程式全部放在一起,或者把它们作为一个词。方程式出现在$…$之间标志。
如果我理解正确,您正在尝试执行以下操作:
-
把句子分成单词:
s = "Some guy did something with emph{ yikes } epsilon" words = s.split() print words
输出:
['Some', 'guy', 'did', 'something', 'with', '\emph{', 'yikes', '}', '\epsilon']
-
计数发生次数:
from collections import Counter dictionary = Counter(words) print dictionary
输出:
Counter({'did': 1, '}': 1, '\epsilon': 1, 'Some': 1, 'yikes': 1, 'something': 1, 'guy': 1, 'with': 1, '\emph{': 1})
-
以单独列表形式访问单词及其对应的数字:
print dictionary.keys() print dictionary.values()
输出:
['did', '}', '\epsilon', 'Some', 'yikes', 'something', 'guy', 'with', '\emph{'] [1, 1, 1, 1, 1, 1, 1, 1, 1]
请注意,我还没有处理任何单词。您可能需要去掉括号或反斜杠。但这可以通过使用for循环遍历字典(或列表)并单独处理每个条目来轻松完成。
<小时>将LaTeX元音变音符转换为unicode字符在某种程度上是一个全新的问题。关于这个话题,有几个堆叠式的问题和答案。也许你只需要在初始字符串中找到/替换它们:
s = s.replace('\"o', unichr(252))
(请注意,根据您的命令行编码,您可能看不到print s
的变音。但它们并没有丢失,如使用print repr(s)
所示。)
若要保留公式,可以使用正则表达式而不是split
:拆分字符串
import re
print re.findall('$.+$|[w]+', s)
输出:
['Some', 'guy', 'did', 'something', 'with', 'emph', 'yikes', '$ \epsilon $']
关于类似的例子和更详细的解释,请参阅我对另一个问题的回答。
小时>