我是一名非计算机科学专业的学生,正在撰写历史论文,涉及确定多个文本中特定术语的频率,然后随着时间的推移绘制这些频率以确定变化和趋势.虽然我已经想出如何确定给定文本文件的单词频率,但我正在处理(相对来说,对我来说)大量文件(> 100),并且为了一致性,我希望限制频率计数中包含的单词到一组特定的术语(有点像"停止列表"的反面)
这应该保持非常简单.最后,我需要的是我处理的每个文本文件的特定单词的频率,最好是电子表格格式(制表符描述文件),这样我就可以使用该数据创建图形和可视化.
我日常使用Linux,使用命令行很舒服,并且喜欢开源解决方案(或者我可以用WINE运行的东西).但这不是一个要求:
我看到两种解决这个问题的方法:
有任何想法吗?
这两个System.Timers.Timer和System.Threading.Timer火在离请求的那些相当不同的时间间隔.例如:
new System.Timers.Timer(1000d / 20);
Run Code Online (Sandbox Code Playgroud)
产生一个每秒发射16次而不是20次的计时器.
为了确保太长的事件处理程序没有副作用,我写了这个小测试程序:
int[] frequencies = { 5, 10, 15, 20, 30, 50, 75, 100, 200, 500 };
// Test System.Timers.Timer
foreach (int frequency in frequencies)
{
int count = 0;
// Initialize timer
System.Timers.Timer timer = new System.Timers.Timer(1000d / frequency);
timer.Elapsed += delegate { Interlocked.Increment(ref count); };
// Count for 10 seconds
DateTime start = DateTime.Now;
timer.Enabled = true;
while (DateTime.Now < start + TimeSpan.FromSeconds(10))
Thread.Sleep(10);
timer.Enabled = false;
// Calculate …Run Code Online (Sandbox Code Playgroud) 更新2016-03-15
我做了很多研究,并学到了很多关于FFT和Accelerate Framework的知识.但经过几天的实验,我有点沮丧.
我想在图表中播放期间显示音频文件的频谱.对于每个时间间隔,它应该在X轴上通过FFT计算的每个频率(在我的情况下为512个值)显示Y轴上的数值(由红色条显示).
输出应如下所示:

我用1024个样本填充缓冲区,仅为开头提取左侧通道.然后我做所有这些FFT的东西.
到目前为止,这是我的代码:
设置一些变量
- (void)setupVars
{
maxSamples = 1024;
log2n = log2f(maxSamples);
n = 1 << log2n;
stride = 1;
nOver2 = maxSamples/2;
A.realp = (float *) malloc(nOver2 * sizeof(float));
A.imagp = (float *) malloc(nOver2 * sizeof(float));
memset(A.imagp, 0, nOver2 * sizeof(float));
obtainedReal = (float *) malloc(n * sizeof(float));
originalReal = (float *) malloc(n * sizeof(float));
setupReal = vDSP_create_fftsetup(log2n, FFT_RADIX2);
}
Run Code Online (Sandbox Code Playgroud)
做FFT.FrequencyArray只是一个包含512个浮点值的数据结构.
- (FrequencyArry)performFastFourierTransformForSampleData:(SInt16*)sampleData andSampleRate:(UInt16)sampleRate
{
NSLog(@"log2n %i n %i, …Run Code Online (Sandbox Code Playgroud) 我有来自传感器的数据,我需要找到它的频率.它看起来fft()似乎是要走的路,但MATLAB文档只显示如何获得频率图,我不知道该怎么做.
这是我的数据:

我有一个方法,它接受一个String参数,并使用NLTK将字符串分解为句子,然后分成单词.然后,它将每个单词转换为小写,最后创建每个单词频率的字典.
import nltk
from collections import Counter
def freq(string):
f = Counter()
sentence_list = nltk.tokenize.sent_tokenize(string)
for sentence in sentence_list:
words = nltk.word_tokenize(sentence)
words = [word.lower() for word in words]
for word in words:
f[word] += 1
return f
Run Code Online (Sandbox Code Playgroud)
我应该进一步优化上面的代码,以加快预处理时间,并且不确定如何这样做.返回值显然应该与上面的完全相同,所以我希望使用nltk虽然没有明确要求这样做.
有什么方法可以加快上面的代码?谢谢.
这个问题与我之前提出的两个不同的问题有关:
1)重现频率矩阵图
我希望在R中重现这个情节:
我已经做到这一点,使用图形下面的代码:
#Set the number of bets and number of trials and % lines
numbet <- 36
numtri <- 1000
#Fill a matrix where the rows are the cumulative bets and the columns are the trials
xcum <- matrix(NA, nrow=numbet, ncol=numtri)
for (i in 1:numtri) {
x <- sample(c(0,1), numbet, prob=c(5/6,1/6), replace = TRUE)
xcum[,i] <- cumsum(x)/(1:numbet)
}
#Plot the trials as transparent lines so you can see the build up
matplot(xcum, type="l", xlab="Number of …Run Code Online (Sandbox Code Playgroud) 我正在努力加快我的项目计算单词频率.我有360多个文本文件,我需要获得单词总数和来自另一个单词列表的每个单词出现的次数.我知道如何使用单个文本文件执行此操作.
>>> import nltk
>>> import os
>>> os.chdir("C:\Users\Cameron\Desktop\PDF-to-txt")
>>> filename="1976.03.txt"
>>> textfile=open(filename,"r")
>>> inputString=textfile.read()
>>> word_list=re.split('\s+',file(filename).read().lower())
>>> print 'Words in text:', len(word_list)
#spits out number of words in the textfile
>>> word_list.count('inflation')
#spits out number of times 'inflation' occurs in the textfile
>>>word_list.count('jobs')
>>>word_list.count('output')
Run Code Online (Sandbox Code Playgroud)
让"通货膨胀","就业","产出"的个人频率变得过于繁琐.我可以将这些单词放入列表中,同时查找列表中所有单词的频率吗?基本上这用Python.
示例:而不是:
>>> word_list.count('inflation')
3
>>> word_list.count('jobs')
5
>>> word_list.count('output')
1
Run Code Online (Sandbox Code Playgroud)
我想这样做(我知道这不是真正的代码,这是我要求帮助的):
>>> list1='inflation', 'jobs', 'output'
>>>word_list.count(list1)
'inflation', 'jobs', 'output'
3, 5, 1
Run Code Online (Sandbox Code Playgroud)
我的单词列表将有10-20个术语,所以我需要能够将Python指向单词列表以获得计数.如果输出能够复制+粘贴到excel电子表格中,并且单词为列,频率为行,那也很好
例:
inflation, jobs, output
3, 5, 1
Run Code Online (Sandbox Code Playgroud)
最后,任何人都可以帮助自动化所有文本文件吗?我想我只是将Python指向文件夹,它可以从新列表中为每个360+文本文件计算上述字数.看起来很简单,但我有点卡住了.有帮助吗?
像这样的输出会很棒:Filename1通胀,工作,输出3,5,1 …
有没有办法(在python中),我可以按频率对列表进行排序?
例如,
[1,2,3,4,3,3,3,6,7,1,1,9,3,2]
Run Code Online (Sandbox Code Playgroud)
上面的列表将按其值的频率顺序排序,以创建以下列表,其中频率最高的项目位于前面:
[3,3,3,3,3,1,1,1,2,2,4,6,7,9]
Run Code Online (Sandbox Code Playgroud) 我已经尝试了几个小时来计算熵,我知道我错过了什么.希望有人在这里可以给我一个想法!
编辑:我认为我的公式错了!
码:
info <- function(CLASS.FREQ){
freq.class <- CLASS.FREQ
info <- 0
for(i in 1:length(freq.class)){
if(freq.class[[i]] != 0){ # zero check in class
entropy <- -sum(freq.class[[i]] * log2(freq.class[[i]])) #I calculate the entropy for each class i here
}else{
entropy <- 0
}
info <- info + entropy # sum up entropy from all classes
}
return(info)
}
Run Code Online (Sandbox Code Playgroud)
我希望我的帖子很清楚,因为这是我第一次在这里发帖.
这是我的数据集:
buys <- c("no", "no", "yes", "yes", "yes", "no", "yes", "no", "yes", "yes", "yes", "yes", "yes", "no")
credit <- c("fair", "excellent", "fair", …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作许多字符串的汇总表.我的数据如下:
x<-c("a", "a", "b", "c", "c", "c", "d")
Run Code Online (Sandbox Code Playgroud)
我如何一次分析每个字符串的重现?理想情况下,生成这样的频率表(我认为很容易按频率降低排序):
"a" 2
"b" 1
"c" 3
"d" 1
Run Code Online (Sandbox Code Playgroud)