Python :getting the count for the adjectives in a string
我有根绳子S="X先生太棒了。他很了不起,Y先生也很了不起。"
我需要从字符串中提取所有形容词以及每个形容词的计数。例如这个字符串有形容词"棒极了","棒极了",其中2个表示棒极了,1个表示棒极了。
为了提取形容词,我使用了nltk。这是提取形容词的代码,
1 | adjectives =[token for token, pos in nltk.pos_tag(nltk.word_tokenize(b)) if pos.startswith('JJ')] |
我需要代码为字符串中的每个形容词获取一个计数器。应该是这样的形容词:计数器
您可以使用
1 2 3 4 5 6 | >>> from collections import Counter >>> adjectives = ['awesome', 'amazing', 'awesome'] >>> counts = Counter(adjectives) >>> counts.items() [('awesome', 2), ('amazing', 1)] |
如果您愿意,可以将其转换为字典:
1 2 | >>> dict(counts.items()) {'amazing': 1, 'awesome': 2} |
号
或者您可以访问键和值:
1 2 3 4 | >>> for key in counts.keys(): ... print key, counts.get(key) awesome 2 amazing 1 |
编辑:
对于列表列表,需要展开列表:
1 2 3 4 5 6 | >>> adjectives = [['awesome', 'amazing'], ['good', 'nice' ]] >>> counts = Counter(adjective ... for group in adjectives ... for adjective in group) >>> counts Counter({'awesome': 1, 'good': 1, 'amazing': 1, 'nice': 1}) |
。
或使用
1 2 3 | >>> from itertools import chain >>> Counter(chain.from_iterable(adjectives)) Counter({'awesome': 1, 'good': 1, 'amazing': 1, 'nice': 1}) |
您的问题可能的解决方案是使用计数器。完整的解决方案是
1 2 3 4 5 6 7 | s="Mr.X is awesome He is amazing Mr.Y is awesome too." adjectives=["awesome","beautiful","handsome","amazing"] c=collections.Counter(s.split()) for key in list(c): if (key not in adjectives): del c[key] print c |
。
我用形容词创建了一个列表,因为我认为你的解决方案已经适合你了。
接下来,我使用空格分割句子,创建一个标记列表。注意,标点符号(例如,你的句子中有"awesome(棒极了)",这将映射到不同于"awesome(棒极了)"的键),但你可以随意拆分。
拆分被赋予counter方法,该方法创建一个counter对象,即dict。
然后我迭代键并删除所有那些不包含在形容词列表中的键。注意,我的
希望有帮助。我相信你可以把它应用到你的代码中。