Получаю ли я общую длину слов в Wor dNet?
Зависит от того, каково определение слова. Функция wn.words()
выполняет итерацию по всем lemma_names
, https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py#L1701 и https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py#L1191
def words(self, lang="eng"):
"""return lemmas of the given language as list of words"""
return self.all_lemma_names(lang=lang)
def all_lemma_names(self, pos=None, lang="eng"):
"""Return all lemma names for all synsets for the given
part of speech tag and language or languages. If pos is
not specified, all synsets for all parts of speech will
be used."""
if lang == "eng":
if pos is None:
return iter(self._lemma_pos_offset_map)
else:
return (
lemma
for lemma in self._lemma_pos_offset_map
if pos in self._lemma_pos_offset_map[lemma]
)
Так что если определение "слова" имеет вид все возможные леммы, тогда да, эта функция дает вам общую длину слов в именах лемм в Wor dnet:
>>> sum(len(lemma_name) for lemma_name in wn.words())
1692291
>>> sum(len(lemma_name.lower()) for lemma_name in wn.words())
1692291
Строковый регистр не нужен, потому что названия лемм должны были быть уменьшены. Даже именованные сущности, например
>>> 'new_york' in wn.words()
True
Но учтите, что одна и та же лемма может иметь очень похожие названия лемм:
>>> 'new_york' in wn.words()
True
>>> 'new_york_city' in wn.words()
True
Это из-за структуры wor dnet. API в NLTK организует «значение» как синтаксис, который содержит набор ссылок, связанный с несколькими леммами, и каждая лемма имеет как минимум одно имя:
>>> wn.synset('new_york.n.1')
Synset('new_york.n.01')
>>> wn.synset('new_york.n.1').lemmas()
[Lemma('new_york.n.01.New_York'), Lemma('new_york.n.01.New_York_City'), Lemma('new_york.n.01.Greater_New_York')]
>>> wn.synset('new_york.n.1').lemma_names()
['New_York', 'New_York_City', 'Greater_New_York']
Но каждое запрашиваемое «слово» может иметь несколько синтаксисов ( то есть множественное значение), например
>>> wn.synsets('new_york')
[Synset('new_york.n.01'), Synset('new_york.n.02'), Synset('new_york.n.03')]
Значит ли токены, такие как zoom_in, считаться словом?
Зависит от определения слова, как в примере выше, если вы выполняете итерацию по wn.words()
, вы перебираете имена лемм, а примеры new_york
показывают, что выражения из нескольких слов существуют в списках имен лемм для каждого набора.