machine-learning - 如何为 latex 字符串创建一个词袋?

标签 machine-learning scikit-learn text-mining feature-extraction

我有一组 latex 格式的输入段落。我想用它们创建一个词袋。

采取一组看起来像这样的人:

"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)会给我 [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 Counter
    dictionary = 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 re
print re.findall('\$.+\$|[\w]+', s)

输出:

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

请参阅my answer to another question类似的例子和更详细的解释。

关于machine-learning - 如何为 latex 字符串创建一个词袋?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26195681/

相关文章:

java - 如何为用户提供的国家名称预测正确的国家名称?

python - 提取任意表达式组合之间的文本(列表)

machine-learning - 如何在arff文件中表示n-gram特征?

machine-learning - CatBoost 中的 CTR 是什么意思

machine-learning - 如何微调 k 均值聚类中的聚类数量以及使用 BigQuery ML 构建模型的增量方式

python-3.x - SVR对象不可调用

python - 安装sklearn时出错

python - Scikit-learn predict_proba 给出错误答案

R:提取关键字后的值和行(文本文件挖掘)

python - 在机器学习中数据集不平衡的情况下,AUC 是否是比准确性更好的指标?如果不是,哪个是最好的指标?