2015-01-12 34 views
-1

我的情况很糟糕。我需要编程一些东西,这是我的能力水平。文本文件概率计算(马尔可夫链) - Python

我已经给出了一个10k字的文本,该文件被称为(test_file.txt)。 我给你们的问题是: 如何让我的程序计算每一个单词和每一个字母,以便我可以计算单词的概率,查看哪个单词和字母代表最多。

我知道它的东西用绳子,我都在这一刻所做的是:

import codecs 
import sys 
import random 

fh = codecs.open("test_file.txt", encoding="utf-8") 

fh.close() 

omega = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'} 

def Markov(text_file): 
    with open("test_file.txt") as t: 
     text = t.read() 

    text = [' '.join(data.split(' ')) if i !=''] 
    text = [i.lower() for i in data if i.isalpha()] 

    chains = {i:[] for i in data} 

这是正确的?

我需要你的帮助家伙。

+2

当你用一个20个字的小文件测试它时,它是做你想做的吗? – Gerrat

+0

我什至不知道,如何用小文件测试它,这就是问题所在。 希望你能帮助我。 – Borgmester

+1

你打电话做一些让你头脑发热的事情“不好的情况”。我会称之为“学习”。 – jme

回答

0

两件事情:

  1. 这是不相关的马尔可夫链。全部。
  2. Python实际上有一些非常好的内建函数,可以使这个或多或少的微不足道。

我不会用勺子喂一个答案,但我不想在这个问题上让你高和干。要点是根据您的具体情况,可以使用python中的Counter对象在几行中完成。

from collections import Counter 

text = open("test_file.txt").read().lower() 
letter_freqs = Counter(text) 

word_freqs = Counter(text.split()) 

根据什么最终的结果你要找的,这可能是也可能不是足够的,但是这应该给你足够远剩下的应该是相当琐碎。

+0

现在,马尔可夫链上没有那么多,但我的项目进一步包括马尔科夫链,这只是开始。 无论如何,谢谢你的回答! – Borgmester

+0

如果你有兴趣进入马尔可夫链,我有一个要点在这里:https://gist.github.com/Slater-Victoroff/6227656。 此外,如果您发现答案有帮助,请不要忘记接受它(表决计数下的复选标记)。 –

+0

Dude它完美地工作。现在我需要将这些数字转换为百分比数字。 它可能类似于: (Letters_representation/text)* 100 当我得到letter_representation时,我需要知道文本中所有字母的确切表示形式。 所以我需要定义一个函数,可以解决这个每个单一的字母,每一个单词。对? – Borgmester