1

さて、私は以前に質問をしました、そして私は私が望むものの答えを得ました。しかし、今はもっと質問があります。

私はこのようなリストを持っています:

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']
4

2 に答える 2

1

平均的な単語の場合、複合語であるかどうかを判断する最も簡単な方法は、半分に切り刻んで、両方の半分が単語であるかどうかを確認することです。さまざまなチョッピングポイントで繰り返しテストする必要があるため、実行時間は単語の長さに比例します。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']
于 2013-03-25T16:52:06.137 に答える
0

一致を差し引いた後に残っている単語が別の単語であるかどうかを確認する必要があります。語源が一致しない状況があると思います。たとえば、別の単語に「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
于 2013-03-25T16:10:15.230 に答える