如何为LaTeX字符串创建词袋?

我有一组以LaTeX格式输入的段落。我想从中创建一个词袋。

这些段落看起来像这样:

"Some guy did something with \emph{ yikes } $ \epsilon $"

我想输出一个字典:

{   "Some": 40,   ...   "yikes": 10   "epsilon (或其Unicode表示)": 3} 

也就是说,我需要一个字典,其中键集是所有段落中出现的所有单词/符号/方程(为了简洁,我将这些都称为单词),以及它们在所有段落中出现的次数统计。

在此基础上,给定一个由k个单词组成的有序元组,我需要为每个段落生成一个k元数组,其中数组的第i个元素表示该段落中元组中第i个单词的出现次数。

例如,(Some, dunk, yikes, epsilon) 将为上述示例生成 [1, 0, 1, 1]

我尝试通过使用词法分析器提取标记并直接处理这些标记来实现这一点。这既困难又容易出错,而且速度慢。有没有更好的策略或工具可以做到这一点?

在处理特殊字符时需要考虑一些特殊情况:

G\""odel => Gödel 

例如。我希望保留这些字符。

另外,我希望完全删除方程或将它们作为一个单词保留。方程出现在 $ … $ 符号之间。


回答:

如果我理解正确的话,你试图做以下几件事:

  1. 将句子分割成单词:

    s = "Some guy did something with \emph{ yikes } \epsilon"words = s.split()print words

    输出:

    ['Some', 'guy', 'did', 'something', 'with', '\\emph{', 'yikes', '}', '\\epsilon']
  2. 统计单词出现的次数:

    from collections import Counterdictionary = Counter(words)print dictionary

    输出:

    Counter({'did': 1, '}': 1, '\\epsilon': 1, 'Some': 1, 'yikes': 1, 'something': 1, 'guy': 1, 'with': 1, '\\emph{': 1})
  3. 将单词及其对应的数量作为单独的列表访问:

    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字符是一个全新的问题。关于这个话题有几个StackOverflow的问题和答案。也许你只需要在初始字符串中查找/替换它们:

s = s.replace('\\"o', unichr(252))

(请注意,根据你的命令行编码,你可能无法通过print s看到变音符号。但它们并没有丢失,可以通过print repr(s)显示出来。)

为了保留方程,你可以使用正则表达式而不是split来分割字符串:

import reprint re.findall('\$.+\$|[\w]+', s)

输出:

['Some', 'guy', 'did', 'something', 'with', 'emph', 'yikes', '$ \\epsilon $']

请参阅我对另一个问题的回答,以获取类似的示例和更详细的解释。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注