我正在使用层次聚类来聚类单词向量,我希望用户能够显示显示聚类的树形图.但是,由于可能有数千个单词,我希望将此树形图截断为一些合理的有价值,每个叶子的标签是该群集中最重要单词的字符串.
我的问题是,根据文档,"标签[i]值是只有当它对应于原始观察而不是非单一群集时才放在第i个叶子节点下的文本." 我认为这意味着我不能标记簇,只能标记奇点?
为了说明,这是一个简短的python脚本,它生成一个简单的标记树形图:
import numpy as np
from scipy.cluster.hierarchy import dendrogram, linkage
from matplotlib import pyplot as plt
randomMatrix = np.random.uniform(-10,10,size=(20,3))
linked = linkage(randomMatrix, 'ward')
labelList = ["foo" for i in range(0, 20)]
plt.figure(figsize=(15, 12))
dendrogram(
linked,
orientation='right',
labels=labelList,
distance_sort='descending',
show_leaf_counts=False
)
plt.show()
Run Code Online (Sandbox Code Playgroud)
现在假设我要截断到只有5个叶子,并且对于每个叶子,将它标记为"foo,foo,foo ...",即构成该群集的单词.(注意:生成这些标签不是问题.)我将其截断,并提供一个匹配的标签列表:
labelList = ["foo, foo, foo..." for i in range(0, 5)]
dendrogram(
linked,
orientation='right',
p=5,
truncate_mode='lastp',
labels=labelList,
distance_sort='descending',
show_leaf_counts=False
)
Run Code Online (Sandbox Code Playgroud)
这是问题,没有标签:
我想这里可能有一个参数'leaf_label_func',但我不知道如何使用它.
我正在尝试编写一个谓词来接受输入文件中的一行.每次使用它时,它应该给出下一行,直到它到达文件的末尾,此时它应该返回false.像这样的东西:
database :-
see('blah.txt'),
loop,
seen.
loop :-
accept_line(Line),
write('I found a line.\n'),
loop.
accept_line([Char | Rest]) :-
get0(Char),
C =\= "\n",
!,
accept_line(Rest).
accept_line([]).
Run Code Online (Sandbox Code Playgroud)
显然这不起作用.它适用于输入文件的第一行,然后无休止地循环.我可以看到我需要在某处找到一些像"C =\= -1"这样的行来检查文件的结尾,但我看不到它的去向.
所以输入和输出的示例可能是......
INPUT
this is
an example
OUTPUT
I found a line.
I found a line.
Run Code Online (Sandbox Code Playgroud)
或者我这样做完全错了?也许有一个内置规则可以做到这一点?
非常简单的问题:我知道有很多方法可以分割原子,例如'example atom'在某些分隔符上,例如'' - > ['example','atom']但是有没有办法分割每个字符?例如['e','x','a',......'o','m'].我试过了
atomic_list_concat(List, '', Atom),
Run Code Online (Sandbox Code Playgroud)
但那会产生错误
ERROR: atomic_list_concat/3: Domain error: `non_empty_atom' expected, found `'
Run Code Online (Sandbox Code Playgroud)
你会推荐什么?
我有一个看起来像的字符串
This is sentence one.%%%0.3%%%0.6%%%This is sentence two.%%%0.4%%%0.9%%%
Run Code Online (Sandbox Code Playgroud)
百分号只是作为分隔符,我可以根据需要进行更改.
我需要最终得到这样的东西:
{
'This is sentence one' => [0.3, 0.6],
'This is sentence two' => [0.4, 0.9]
}
Run Code Online (Sandbox Code Playgroud)
我可以把它分成一个数组或哈希没有问题,唯一让我麻烦的是让每个第一个段成为一个键而每个其他段都成为一个数组的元素.了解perl,可能有一种非常有效的方法可以在一行中完成!
prolog ×2
string ×2
arrays ×1
dendrogram ×1
file-io ×1
hash ×1
matplotlib ×1
perl ×1
python ×1
scipy ×1
split ×1
swi-prolog ×1