在Python中使用ngram我的目的是从输入文本中找出动词及其相应的副词。 我做了什么:
输入文字:""他说话很奇怪。一匹马可以跑得快。那里有一棵大树。太阳很美。这个地方装修得很好。他们很奇怪。她跑得很快。她说话很大。杰克跑得很慢。"" 代码: -
`finder2 = BigramCollocationFinder.from_words(wrd for (wrd,tags) in posTagged if tags in('VBG','RB','VBN',))
scored = finder2.score_ngrams(bigram_measures.raw_freq)
print sorted(finder2.nbest(bigram_measures.raw_freq, 5))`
从我的代码中,我得到了输出:
[('talking', 'greatly'), ('talking', 'weirdly'), ('weirdly', 'talking'),('runs','fast'),('runs','slow')]
这是动词及其相应副词的列表。
我在寻找什么:
我想从中找出动词和所有相应的副词。例如('talking'- 'greatly','weirdly),('runs'-'fast','slow')etc.
答案 0 :(得分:1)
您已经拥有所有动词副词双字母组合的列表,因此您只是询问如何将它们合并到一个字典中,该字典为每个动词提供所有副词。但首先让我们以更直接的方式重新创建你的双子星球:
pairs = list()
for (w1, tag1), (w2, tag2) in nltk.bigrams(posTagged):
if t1.startswith("VB") and t2 == "RB":
pairs.append((w1, w2))
现在提出您的问题:我们将使用每个动词后面的副词构建一个字典。我将副词存储在一个集合中,而不是列表中,以消除重复。
from collections import defaultdict
consolidated = defaultdict(set)
for verb, adverb in pairs:
consolidated[verb].add(adverb)
defaultdict
为之前未曾见过的动词提供了一个空集,因此我们不需要手动检查。
根据作业的详细信息,你可能还需要对你的动词进行大小写和词形翻译,以便来自"驾驶鲁莽"和#34;我小心翼翼地开车#34;记录在一起:
wnl = nltk.stem.WordNetLemmatizer()
...
for verb, adverb in pairs:
verb = wnl.lemmatize(verb.lower(), "v")
consolidated[verb].add(adverb)
答案 1 :(得分:-1)
我认为你正在丢失你需要的信息。您需要以某种方式保留词性数据,以便能够以正确的方式处理像part_of_speech = {word:tag for word,tag in posTagged}
best_bigrams = finger2.nbest(... as you like it ...)
verb_first_bigrams = [b if part_of_speech[b[1]] == 'RB' else (b[1],b[0]) for b in best_bigrams]
这样的双字母组合。
可能是bigram finder可以接受标记的单词元组(我不熟悉nltk)。或者,您可能不得不求助于创建外部索引。如果是这样,这样的事情可能有用:
adverbs_for = {}
for verb,adverb in verb_first_bigrams:
if verb not in adverbs_for:
adverbs_for[verb] = [adverb]
else:
adverbs_for[verb].append(adverb)
然后,使用前面的动词,您可以将其转换为字典或列表列表或其他:
var start = "2115 First Avenue SE Unit 1306, Cottage Grove Place, Cedar Rapids, IA, 52402"; //Set the source/ origin
var end = "6126 Rockwell Dr. Apt 128, Keystone Place, Cedar Rapids, IA, 52402";