繁体   English   中英

如何将bigram编程为python中的表?

How do I program bigram as a table in python?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在做此作业,现在我被困住了。 我不能用英语编程Bigram频率,不能用python 编程 “条件概率”吗?

也就是说,概率 P() 令牌 W_n 给定前面的令牌 W_ {n-1} 等于他们的二元组或两个标记同时出现的概率 P(W_ {n-1},W_n) ,除以前一个令牌的概率。

我有一个包含很多字母的文本,然后我计算出该文本中字母的概率,因此与文本中的字母相比,字母“ a”出现0.015%

这些字母来自^a-zA-Z ,我想要的是:
如何制作一个具有字母((alphabet)x(alphabet))长度的表格,以及如何计算每种情况的条件概率?

就像是:

[[(a|a),(b|a),(c|a),...,(z|a),...(Z|a)]
 [(a|b),(b|b),(c|b),...,(z|b),...(Z|b)]
                    ...       ...
 [(a|Z),(b|Z),(c|Z),...,(z|Z),...(Z|Z)]]

为此,我应该计算概率,例如:如果此时您拥有字母“ a”,那么得到字母“ a”的机会是多少,依此类推。

我无法开始,希望您能启动我,并希望我明确需要解决的问题。

1 个回复

假设您的文件没有其他标点符号(足够容易删除):

import itertools

def pairwise(s):
    a,b = itertools.tee(s)
    next(b)
    return zip(a,b)

counts = [[0 for _ in range(52)] for _ in range(52)]  # nothing has occurred yet
with open('path/to/input') as infile:
    for a,b in pairwise(char for line in infile for word in line.split() for char in word):  # get pairwise characters from the text
        given = ord(a) - ord('a')  # index (in `counts`) of the "given" character
        char = ord(b) - ord('a')   # index of the character that follows the "given" character
        counts[given][char] += 1

# now that we have the number of occurrences, let's divide by the totals to get conditional probabilities

totals = [sum(count[i] for i in range(52)) for count in counts]
for given in range(52):
    if not totals[given]:
        continue
    for i in range(len(counts[given])):
        counts[given][i] /= totals[given]

我没有测试过,但这应该是一个好的开始

这是一个字典版本,应该更易于阅读和调试:

counts = {}
with open('path/to/input') as infile:
    for a,b in pairwise(char for line in infile for word in line.split() for char in word):
        given = ord(a) - ord('a')
        char = ord(b) - ord('a')
        if given not in counts:
            counts[given] = {}
        if char not in counts[given]:
            counts[given][char] = 0
        counts[given][char] += 1

answer = {}
for given, chardict in answer.items():
    total = sum(chardict.values())
    for char, count in chardict.items():
        answer[given][char] = count/total

现在, answer包含您追求的概率。 如果您想给定“ b”的概率为“ a”,请查看answer['b']['a']

2 我如何在python中使用nltk查找特定的bigram?

我目前正在使用nltk.book iny Python,并希望查找特定双字母组的频率。 我知道有bigram()函数可以为您提供文本中最常见的bigram,如以下代码所示: 但是,如果我只搜索“希望”这样的特定内容,该怎么办? 到目前为止,我在nltk文档中找不到任何有关此内容的信息。 ...

3 我不能用 Python3 对句子进行二重化

我正在使用 python3 并且我正在训练一个句子的双字词,但解释器给了我一个我无法理解的问题。 这是什么意思:“生成器对象 ngrams 在 0x7ff1d81d2468”? 为什么我既不能检查也不能打印 n-gram? ...

4 如何以表格格式打印每个二元组的概率

我要打印的确切格式如下: 下面是我的代码。 这给了我每个二元组的Bi_Prob。 (即0.000xxx,0.0000xxx,0.0000x....。)我对Python不太了解,因此我在这里有很多帮助,无论如何我都可以很快制作变量MLE Prob ..但是我很难以表格格式打印。. ...

2016-04-21 12:15:17 0 737   python
7 如何解释Python NLTK bigram似然比?

考虑到下面的代码(取自该问题 ),我试图找出如何正确解释nltk的“可能性比”。 具有以下输出: 看一下文档 ,看起来像印在每个二元组旁边的似然比来自 “使用似然比对Mangram和Schutze 5.3.4进行评分。” 参考这篇文章 ,在pg。 22: ...

9 如何使用Bigram计数tfidf?

在这里,我有一个名为tweetRV.csv的数据框,其中包含3列(tweet,停用词和组)。 而且我只使用名称为(Stopword)的TFIDF列,并且设法通过下面的代码获取结果。 我设法在Unigram中分离了文本,然后像下面的代码一样计数了TFIDF 停用词列中的单词已经像这样被标记 像 ...

10 我怎么能算出特定的二元词呢?

我想在文本文件中查找并计算特定的二元词,例如“红苹果”。 我已经将文本文件设置为单词列表,因此我无法使用正则表达式计算整个短语。 (即二元组)(或者我可以吗?) 如何计算文本文件中的特定二元组? 不使用nltk或其他模块...正则表达式可以解决? ...

2016-04-19 02:45:56 2 731   python
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM