繁体   English   中英

将复合名词与基本名词分开,第二部分

[英]Separating compound nouns from basic nouns part 2

好吧,我之前问过一个问题,我得到了想要的答案。 但是,我现在有更多问题。

我有一个这样的清单:

name = ['road', 'roadwork', 'pill', 'pillbox', 'pillow', 'ball',
'football', 'basketball', 'work', 'box', 'foot', 'basket']

下面的代码将带有复合名词的单词与基本单词分开:

for candidate in name:
    for word in name:
        if word != candidate and word in candidate:
            break      
        else:              
            print candidate

但是,我意识到该代码过于严格,因为它还会从列表中删除“枕头”。

有没有可以生成以下结果的代码:

name = ['road', 'pill', 'pillow', 'ball', 'work', 'box', 'foot', 'basket']

对于您的普通单词,确定它是否为复合单词的最简单方法是将其切成两半,然后看两半是否都是单词。 您必须使用不同的斩波点重复测试,因此运行时间与单词的长度成正比。 除了189,000个字符长的化学名称外 ,任何英语单词都应该相当快。

words = ['road', 'roadwork', 'pill', 'pillbox', 'pillow', 'ball', 'football', 'basketball', 'work', 'box', 'foot', 'basket']

wordSet = set(words)

def isWord(w):
    return w in wordSet

def isCompoundWord(word):
    for idx in range(1, len(word)):
        left = word[:idx]
        right = word[idx:]
        if isWord(left) and isWord(right):
            return True
    return False

nonCompoundWords = [word for word in words if not isCompoundWord(word)]
print nonCompoundWords

输出:

['road', 'pill', 'pillow', 'ball', 'work', 'box', 'foot', 'basket']

您需要找出减去匹配项后剩下的单词是另一个单词。 在某些情况下,我认为词源会不匹配。 我在想包含另一个单词加上“ is”的单词,例如,其中“ is”没有被使用。

编辑:例如:

words = ['book','store','bookstore','booking']
li = []
for word in words:
    for test in words:
        if test in word:
            temp = word[len(test):]
            if temp in words and word not in li:
                li.append(word) 

for x in li:
    words.remove(x)
print words

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM