我有一组串联的词,我想将它们分成数组

例如 :

split_word("acquirecustomerdata")
=> ['acquire', 'customer', 'data']

我找到了pyenchant,但不适用于64位Windows。

然后,我尝试将每个字符串拆分为子字符串,然后将它们与wordnet进行比较以找到等效的单词。
例如 :
from nltk import wordnet as wn
def split_word(self, word):
    result = list()
    while(len(word) > 2):
        i = 1
        found = True
        while(found):
            i = i + 1
            synsets = wn.synsets(word[:i])
            for s in synsets:
                if edit_distance(s.name().split('.')[0], word[:i]) == 0:
                    found = False
                    break;
        result.append(word[:i])
        word = word[i:]
   print(result)

但是这种解决方案不确定,而且时间太长。
因此,我正在寻找您的帮助。

谢谢

最佳答案

Word Segmentation Task的工作中检查-Norvig

from __future__ import division
from collections import Counter
import re, nltk

WORDS = nltk.corpus.brown.words()
COUNTS = Counter(WORDS)

def pdist(counter):
    "Make a probability distribution, given evidence from a Counter."
    N = sum(counter.values())
    return lambda x: counter[x]/N

P = pdist(COUNTS)

def Pwords(words):
    "Probability of words, assuming each word is independent of others."
    return product(P(w) for w in words)

def product(nums):
    "Multiply the numbers together.  (Like `sum`, but with multiplication.)"
    result = 1
    for x in nums:
        result *= x
    return result

def splits(text, start=0, L=20):
    "Return a list of all (first, rest) pairs; start <= len(first) <= L."
    return [(text[:i], text[i:])
            for i in range(start, min(len(text), L)+1)]

def segment(text):
    "Return a list of words that is the most probable segmentation of text."
    if not text:
        return []
    else:
        candidates = ([first] + segment(rest)
                      for (first, rest) in splits(text, 1))
        return max(candidates, key=Pwords)

print segment('acquirecustomerdata')
#['acquire', 'customer', 'data']

为了获得更好的解决方案,您可以使用bigram/trigram。

有关更多示例,请访问:Word Segmentation Task

关于python - 在python中拆分句子而没有空格(nltk?),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38125281/

10-09 07:07
查看更多