1

私は Python と NLTK にかなり慣れていませんが、質問がありました。自作のコーパスから7文字以上の単語だけを抽出するものを書いていました。しかし、それはすべての単語を抽出することが判明しました...誰かが私が間違ったことを知っていますか?

loc="C:\Users\Dell\Desktop\CORPUS"
Corpus= CategorizedPlaintextCorpusReader(loc,'(?!\.svn).*\.txt, cat_pattern=r '(Shakespeare|Milton)/.*)
def long_words(corpus)
    for cat in corpus.categories():
        fileids=corpus.fileids(categories=cat)
        words=corpus.words(fileids)
         long_tokens=[]
         words2=set(words)
         if len(words2) >=7:
             long_tokens.append(words2)


Print long_tokens

みんな、ありがとう!

4

1 に答える 1

1

交換

if len(words2) >=7:
    long_tokens.append(words2)

と:

long_tokens += [w for w in words2 if len(w) >= 7]

説明: あなたが行っていたのは、単語corpus.words(fileids)数が少なくとも 7 の場合に生成されたすべての単語 (トークン) を追加していたことです (だから、あなたのコーパスは常にそうだと思います)。本当にやりたかったことは、トークン セットから 7 文字より短い単語を除外し、残りの長い単語を に追加することでしたlong_tokens

関数は結果 (7 文字以上のトークン) を返す必要があります。あなたが作成して扱う方法CategorizedPlaintextCorpusReaderは問題ないと思います:

loc="C:\Users\Dell\Desktop\CORPUS"
Corpus= CategorizedPlaintextCorpusReader(loc,'(?!\.svn).*\.txt, cat_pattern=r'(Shakespeare|Milton)/.*)

def long_words(corpus = Corpus):
    long_tokens=[]
    for cat in corpus.categories():
        fileids = corpus.fileids(categories=cat)
        words = corpus.words(fileids)
        long_tokens += [w for w in set(words) if len(w) >= 7]
    return set(long_tokens)

print "\n".join(long_words())

コメントでいただいた質問への回答は次のとおりです。

for loc in ['cat1','cat2']:
  print len(long_words(corpus=CategorizedPlaintextCorpusReader(loc,'(?!\.svn).*\.txt, cat_pattern=r'(Shakespeare|Milton)/.*)), 'words over 7 in', loc
于 2013-01-22T16:34:44.530 に答える