我怎样才能为乳胶字符串创建一个单词袋



我有一组乳胶格式的输入段落。我想用它们制作一袋单词。

举一组看起来像这样的人:

"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 

例如。我想保存这些。

此外,我想把方程式全部放在一起,或者把它们作为一个词。方程式出现在$…$之间标志。

如果我理解正确,您正在尝试执行以下操作:

  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字符在某种程度上是一个全新的问题。关于这个话题,有几个堆叠式的问题和答案。也许你只需要在初始字符串中找到/替换它们:

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 $']

关于类似的例子和更详细的解释,请参阅我对另一个问题的回答。

相关内容

  • 没有找到相关文章

最新更新