[英]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.