我有一组字符串清单:
Sub test()
Dim x As Long
Dim firstRow As Long
firstRow = 1
Dim lastRow As Long
With ActiveSheet
lastRow = .Range("B2").End(xlDown).Row
For x = lastRow To firstRow Step -1
If .Range("B" & x).Value = "4-1/C" Then
.Range("B" & x).Offset(0, 15).Value = "=INDIRECT(""'""&RC[-16]&""'!A22"")"
.Range("B" & x).Offset(1, 15).Value = "=INDIRECT(""'""&R[-1]C[-16]&""'!A23"")"
.Range("B" & x).Offset(2, 15).Value = "=INDIRECT(""'""&R[-2]C[-16]&""'!A24"")"
.Range("B" & x).Offset(3, 15).Value = "=INDIRECT(""'""&R[-3]C[-16]&""'!A25"")"
.Range("B" & x).Offset(0, 16).Value = "=INDIRECT(""'""&RC[-17]&""'!J22"")"
.Range("B" & x).Offset(1, 16).Value = "=INDIRECT(""'""&R[-1]C[-17]&""'!J23"")"
.Range("B" & x).Offset(2, 16).Value = "=INDIRECT(""'""&R[-2]C[-17]&""'!J24"")"
.Range("B" & x).Offset(3, 16).Value = "=INDIRECT(""'""&R[-3]C[-17]&""'!J25"")"
End If
Next
End With
End Sub
我想在这个语料库上建立语言模型(最好使用nltk),以获得句子中单词的概率。 所以,我以后的用法将是
P(“山姆” |“我是”)
在这个语料库中。 我找不到-最好的方法是什么?如何训练ngram模型并在以后获得这样的概率?
谢谢!
答案 0 :(得分:0)
我建议使用马尔可夫链https://en.wikipedia.org/wiki/Markov_chain
一个非常简单的例子供您参考。
假设您要分析1克。
已分析的文本:
monkey eats banana
dog eats bone
字母组合:monkey
,eats
,banana
,dog
,bone
,BEGIN
,END
。
每个句子都以开头开头。
可能有两个转换:
BEGIN->monkey
BEGIN->dog
这意味着句子以monkey
开头的可能性为50%。
monkey
之后,现在monkey->eats
有100%的转换机会(因为在分析的文本中没有其他monkey->*
的转换。
现在eats
之后,banana
的机会为50%,bone
的机会为50%。
因此,通常使用此模型,我们可以生成以下句子:
monkey eats banana
monkey eats bone
dog eats bone
dog eats banana
每个产品中有25%要生产
请注意,骨头和香蕉总是会变成END
使用Digram,您只需将其拆分为monkey eats
-> banana END
这只是简化的大图,希望对您有帮助
修改
关于注释中提到的平滑,请使用Laplace。
假设您确实比我们看到的每个单词都多。
例如,现在我们将有:
eats bone (2)
eats banana (2)
eats chocolate (1)
eats dog (1)
当然,在这种情况下,我们的数据集非常小,但是对于较大的数据集,您将得到类似的内容:
eats bone (104)
eats banana (1031)
eats chocolate (1)
eats dog (3)
...