句子聚类
Sentence clustering
我有大量来自不同来源的名字。
- 我需要提取所有组(部分名称),这些组从一个到另一个重复。
在下面的示例中,程序应定位:Post、Office、Post Office.
- 我需要统计人气。
所以我想提取一个按流行度排序的短语列表。
以下是名称示例:
Post Office - High Littleton
Post Office Pilton Outreach Services
Town Street Post Office
post office St Thomas
基本上需要找出一些算法或更好的库,才能得到这样的结果:
Post Office: 16999
Post: 17934
Office: 16999
Tesco: 7300
...
这是完整的example of names。
我写了一个适用于单个单词但不适用于句子的代码:
from textblob import TextBlob
import operator
title_file = open("names.txt", 'r')
blob = TextBlob(title_file.read())
list = sorted(blob.word_counts.items(), key=operator.itemgetter(1))
print list
你不是在寻找集群(这可能就是为什么 "all of them suck" 为 @andrewmatte)。
您正在寻找的是字数统计(或更准确地说,n-gram 统计)。这实际上是一个更容易的问题。这就是为什么您找不到任何图书馆的原因...
嗯,实际上你有一些库。例如,在 python 中,collections
模块具有 class Counter
,其中包含大量可重用代码。
一段未经测试的非常基础的代码:
from collections import Counter
counter = Counter()
for s in sentences:
words = s.split(" ")
for i in range(len(words)):
counter.add(words[i])
if i > 0: counter.add((words[i-1], words[i]))
你从counter
得到的csn最频繁。如果您希望单词和单词对分开,请随意使用两个计数器。如果您需要更长的短语,请添加一个内循环。您可能还想清理句子(例如小写)并使用正则表达式进行拆分。
您在找这样的东西吗?
workspace={}
with open('names.txt','r') as f:
for name in f:
if len(name): # makes sure line isnt empty
if name in workspace:
workspace[name]+=1
else:
workspace[name]=1
for name in workspace:
print "{}: {}".format(name,workspace[name])
我有大量来自不同来源的名字。
- 我需要提取所有组(部分名称),这些组从一个到另一个重复。 在下面的示例中,程序应定位:Post、Office、Post Office.
- 我需要统计人气。
所以我想提取一个按流行度排序的短语列表。
以下是名称示例:
Post Office - High Littleton
Post Office Pilton Outreach Services
Town Street Post Office
post office St Thomas
基本上需要找出一些算法或更好的库,才能得到这样的结果:
Post Office: 16999
Post: 17934
Office: 16999
Tesco: 7300
...
这是完整的example of names。
我写了一个适用于单个单词但不适用于句子的代码:
from textblob import TextBlob
import operator
title_file = open("names.txt", 'r')
blob = TextBlob(title_file.read())
list = sorted(blob.word_counts.items(), key=operator.itemgetter(1))
print list
你不是在寻找集群(这可能就是为什么 "all of them suck" 为 @andrewmatte)。
您正在寻找的是字数统计(或更准确地说,n-gram 统计)。这实际上是一个更容易的问题。这就是为什么您找不到任何图书馆的原因...
嗯,实际上你有一些库。例如,在 python 中,collections
模块具有 class Counter
,其中包含大量可重用代码。
一段未经测试的非常基础的代码:
from collections import Counter
counter = Counter()
for s in sentences:
words = s.split(" ")
for i in range(len(words)):
counter.add(words[i])
if i > 0: counter.add((words[i-1], words[i]))
你从counter
得到的csn最频繁。如果您希望单词和单词对分开,请随意使用两个计数器。如果您需要更长的短语,请添加一个内循环。您可能还想清理句子(例如小写)并使用正则表达式进行拆分。
您在找这样的东西吗?
workspace={}
with open('names.txt','r') as f:
for name in f:
if len(name): # makes sure line isnt empty
if name in workspace:
workspace[name]+=1
else:
workspace[name]=1
for name in workspace:
print "{}: {}".format(name,workspace[name])