- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我为问题编码:
What percentage of noun synsets have no hyponyms? You can get all noun synsets using wn.all_synsets('n').
这是我的代码:
import nltk
from nltk.corpus import wordnet as wn
all_noun = wn.all_synsets('n')
print(all_noun)
print(wn.all_synsets('n'))
all_num = len(set(all_noun))
noun_have_hypon = [word for word in wn.all_synsets('n') if len(word.hyponyms()) >= 1]
noun_have_num = len(noun_have_hypon)
print('There are %d nouns, and %d nouns without hyponyms, the percentage is %f' %
(all_num, noun_have_num, (all_num-noun_have_num)/all_num*100))
当我运行这段代码时,输出是
<generator object all_synsets at 0x10927b1b0>
<generator object all_synsets at 0x10e6f0bd0>
There are 82115 nouns, and 16693 nouns without hyponyms, the percentage is 79.671193
但如果改变
noun_have_hypon = [word for word in wn.all_synsets('n') if len(word.hyponyms()) >= 1]
到
noun_have_hypon = [word for word in all_noun if len(word.hyponyms()) >= 1]
输出变为
<generator object all_synsets at 0x10917b1b0>
<generator object all_synsets at 0x10e46aab0>
There are 82115 nouns, and 0 nouns without hyponyms, the percentage is 100.000000
为什么即使 all_noun = wn.all_synsets('n')
两个答案也不相等, 0x10927b1b0 和 0x10e6f0bd0 是什么意思?
最佳答案
它与 NLTK 关系不大,但更多的是 Generator Expressions vs. List Comprehension 之间的区别.
让我们来看一个小例子:
首先,让我们创建一个返回简单列表的函数:
>>> def some_func_that_returns_a_list():
... list_to_be_returned = []
... for i in range(10):
... list_to_be_returned.append(i)
... return list_to_be_returned
...
>>> some_func_that_returns_a_list()
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
请注意,在 some_func_that_returns_a_list()
函数中,需要创建一个列表并在函数返回调用它的代码中的位置之前将值放入。
类似地,我们可以使用生成器来实现需要返回的相同列表,但它有点不同,因为它使用了 yield。关键词:
>>> def some_func_that_returns_a_generator():
... for i in range(10):
... yield i
...
>>>
请注意,在函数中没有要返回的列表的实例化。
当您尝试调用该函数时:
>>>some_func_that_returns_a_generator()
<generator object some_func_that_returns_a_generator at 0x7f312719a780>
您收到生成器的字符串表示形式,即只是描述函数的内容。此时,没有实例化的值和生成器的指针,它应该小于实例化列表的函数:
>>> import sys
>>> sys.getsizeof(some_func_that_returns_a_generator())
80
>>> sys.getsizeof(some_func_that_returns_a_list())
200
由于生成器不会实例化您需要的结果列表的值,它只会一次弹出一个正在yield
的项目,您需要“手动”循环生成器以获取列表,例如:
>>> list(some_func_that_returns_a_generator())
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [i for i in some_func_that_returns_a_generator()]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
但在这种情况下,它正在“即时”创建列表,如果您不打算停止列表而是一次读取一个元素,则生成器将是有利的(内存方面) .
另见:
因此对于 NLTK wn.all_synsets()
WordNet API,您可以简单地执行以下操作:
>>> from nltk.corpus import wordnet as wn
>>> nouns_in_wordnet = list(wn.all_synsets('n'))
但请注意,它会将作为名词的整个同义词集列表保存在内存中。
如果你想过滤超过 1 个上位词的名词,你可以避免使用 filter()
函数实例化完整的名词列表:
>>> filter(lambda ss: len(ss.hypernyms()) > 0, wn.all_synsets('n'))
最后,要在不将 Synsets 存储在内存中的情况下“即时”计算它,您可以:
>>> len(filter(lambda ss: len(ss.hypernyms()) > 0, wn.all_synsets('n')))
74389
或更简洁:
>>> sum(1 for ss in wn.all_synsets('n') if len(ss.hypernyms()) > 0)
74389
但最有可能的是,您想要访问同义词集,因此您可能正在寻找:
>>> nouns_with_hyper = filter(lambda ss: len(ss.hypernyms()) > 0, wn.all_synsets('n'))
>>> len(nouns_with_hyper)
74389
关于python - 为什么 wordnet 中的 NLTK wn.all_synsets() 函数不返回同义词集列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37810469/
如标题所示,ans_list是一个答案列表,ans_index是一个数字(答案在词汇表中的索引,但与atm无关) 这里生成的 tree.anslist 是什么? (例如,仅针对第一个),忽略迭代。 f
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将具有一个元素的东西拿走。 这与 How do I “flatte
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将带有一个元素的东西拿走。 这与 How do I “flatte
这个问题已经有答案了: Convert nested list to 2d array (3 个回答) 已关闭 7 年前。 java中有没有快捷方式可以转换 List> 到 String[][] ?
我在排序时遇到问题 List> 。我创建了一个自定义比较器,在其中编写了对数据进行排序的代码。 public class CustomComparator implements Comparator
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Java Generics: Cannot cast List to List? 我只是想知道为什么下面的java代
试图想出一个 LINQy 方法来做到这一点,但我什么也没想到。 我有一个对象列表<>,其中包含一个属性,该属性是逗号分隔的字母代码列表: lst[0].codes = "AA,BB,DD" lst[1
假设我有这些任务: points = [] point = (1, 2) 我怎么会这样做: points += point 它工作得很好,并且给了我点 = [1, 2]。但是,如果我这样做: poin
如何在 scala 中将 List[Task[List[Header]]] 类型转换为 Task[List[Header]]。 我有一个方法返回 Task[List[Header]] 并多次调用 do
如何在 Java 中查找二维列表的元素? 我有一个参数为 List> 的函数我想知道如何找到这个列表的行和列。 最佳答案 如果你喜欢 List> obj 然后你就可以像这样访问 obj.get(cur
分配 List到 List工作正常。 分配 List>到 List>不编译。 代码 public class Main { public static void main(String[] a
我正在用 Java 编写一个方法,该方法必须接收并迭代 Serializable 的 List。 有什么区别: public void myMethod(List list) { } 和 public
我看到很多人想用 mvvm 更新网格/列表/树的一部分,但他们不想刷新整个列表。 对于所有遇到此问题的人,我做了以下示例。 希望这对你有用。 最佳答案 这是一个简单的例子。整个代码中最重要的是: Bi
我正在为现有的 C++ 库编写包装器,该库使用列表,其中 T 是自定义结构。我被建议使用 vector 而不是列表,但我试图避免修改库。 为了更好地理解这个场景,我做了一个简单的应用程序,使用一个列表
List list List list 这两种声明有什么区别吗? 谢谢, 最佳答案 是的。 List可以包含所有派生自 Base 的不同事物的混合物. List包含同质项(从某种意义上说,它们必须全部
有人可以尽可能详细地解释以下类型之间的区别吗? List List List 让我更具体一点。我什么时候想使用 // 1 public void CanYouGiveMeAnAnswer(List l
我有一个元组列表,每个元组都是一对列表。所以我的数据看起来像: mylist = [(['foo', 'bar'], ['bar', 'bar']),(['bar', 'bar'],['bar', '
也许是一个时髦的标题,但我遇到了以下问题: 给定一个类型为 (a * b) list 的列表,我想创建一个类型为 (a * b list) list 的新列表。一个例子: 给定列表 let testL
我是一名优秀的程序员,十分优秀!