5

私は持っています:

from __future__ import division
import nltk, re, pprint
f = open('/home/a/Desktop/Projects/FinnegansWake/JamesJoyce-FinnegansWake.txt')
raw = f.read()
tokens = nltk.wordpunct_tokenize(raw)
text = nltk.Text(tokens)
words = [w.lower() for w in text]

f2 = open('/home/a/Desktop/Projects/FinnegansWake/catted-several-long-Russian-novels-and-the-NYT.txt')
englishraw = f2.read()
englishtokens = nltk.wordpunct_tokenize(englishraw)
englishtext = nltk.Text(englishtokens)
englishwords = [w.lower() for w in englishwords]

これはNLTKマニュアルから直接です。次にやりたいのはvocab、OEDのような完全な英語の単語のセットと比較し、違いを抽出することです。つまり、OEDに含まれていない、またはおそらく含まれないであろうFinnegansWakeの単語のセットです。私は数学志向の人というよりは口頭の人なので、その方法はまだわかりません。マニュアルでは、実際にはやりたくないことについて詳しく説明しすぎています。ただし、コードはあと1行か2行だと思います。

4

1 に答える 1

4

あなたの英語の辞書が本当にセット (できれば小文字の単語) である場合、

set(vocab) - english_dictionary

vocabセットには含まれるがセットには含まれない単語のセットを提供しますenglish_dictionary。(このセット違いのような操作を行うにはセットに戻す必要があるので、それでvocabリストに変えてしまったのは残念です!)。sorted

あなたの英語辞書が別の形式で、実際にはセットではないか、小文字の単語だけで構成されていない場合は、その形式を教えていただく必要があります!-)

編集: OP の編集により、words(以前は と呼ばれていたものvocab) とenglishwords(以前は と呼ばれていたものenglish_dictionary) の両方が実際には小文字の単語のリストであることが示されている場合、

newwords = set(words) - set(englishwords)

また

newwords = set(words).difference(englishwords)

「英単語でない単語の集合」を表現する2つの方法があります。前者は少し簡潔で、後者はおそらくもう少し読みやすく (マイナス記号の代わりに「差異」という単語を明示的に使用しているため)、おそらくもう少し効率的です (リストenglishwordsをセットに明示的に変換しないため)。 -- ただし、速度が重要な場合は、「内部的differenceに」何らかの「変換から設定」のような操作を行う必要があるため、測定によってこれを確認する必要があります)。

セットの代わりに結果としてリストを取得したい場合はsorted(newwords)、アルファベット順にソートされlist(newwords)たリストが得られます (リストは少し速くなりますが、完全に任意の順序で表示されます。余分な時間と見返りに、きれいにアルファベット順に並べられた結果を得る;-)。

于 2010-08-06T22:41:41.987 に答える