本文整理汇总了Python中nltk.Tree.un_chomsky_normal_form方法的典型用法代码示例。如果您正苦于以下问题:Python Tree.un_chomsky_normal_form方法的具体用法?Python Tree.un_chomsky_normal_form怎么用?Python Tree.un_chomsky_normal_form使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类nltk.Tree
的用法示例。
在下文中一共展示了Tree.un_chomsky_normal_form方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: evaluate
# 需要导入模块: from nltk import Tree [as 别名]
# 或者: from nltk.Tree import un_chomsky_normal_form [as 别名]
def evaluate(fragments, sumfunc, condition, normalization, verbose=True, perbook=False, topfragments=False, breakdown=True, conftable=False):
green = "\033[32m"; red = "\033[31m"; gray = "\033[0m" # ANSI codes
names = set(map(getauthor, fragments.values()[0]))
results = {}
# heading
if verbose and not perbook:
print "\n &", 21 * " ",
print "&".join(a.rjust(16) for a in sorted(names)),
print "&\tguess &\t\t\tconfidence\\\\"
prev = "foo.bar"
# loop over texts to be classified
for text in sorted(fragments):
if perbook and getauthor(text) != getauthor(prev):
print "\n &", 21 * " ",
print " &".join("\\rotatebox{45}{%s}" % a.split(" - ")[-1].split(".")[0].replace("&","\\&") for a in sorted(fragments[text])), "\\\\"
if verbose: print text.split(" - ")[-1].split(".")[0][:25].replace("&","\\&").ljust(25),
inter = {}
# loop over possible authors
for author in sorted(fragments[text]):
inter[author] = sum(map(sumfunc, filter(condition, fragments[text][author].items()))) / normalization(text, author)
if verbose:
for author in sorted(inter):
if inter[author] == max(inter.values()): l,r = "\\textbf{","}"
else: l, r = "".ljust(8), " "
if isinstance(inter[author], float): print ("& %s%.2f%s" % (l,inter[author],r)).rjust(16),
elif isinstance(inter[author], int): print ("& %s%d%s" % (l,inter[author],r)).rjust(16),
else: print "& %s%s" % (l,repr(inter[author]).rjust(8),r),
actualauthor = getauthor(text)
guess = max(inter, key=inter.get)
results.setdefault(actualauthor, []).append(guess)
if verbose and not perbook:
print "&",
print green+"correct:" if getauthor(guess) == actualauthor else red+"wrong: ",
print getauthor(guess).ljust(10), gray,
try: confidence = (100 * (max(inter.values()) - sorted(inter.values())[-2]) / float(max(inter.values())))
except ZeroDivisionError: confidence = 0.0
except IndexError: confidence = 0.0
print "& %s%5.2f%s " % ((red if confidence < 50 else green), confidence, gray)
elif verbose: print "\\\\"
prev = text
if verbose: print
if topfragments: print "top fragments"
for name in sorted(names) if topfragments else ():
for text in sorted(fragments):
if not getauthor(text) == name: continue
print text
for label in ("(ROOT", "(S ", "(NP ", "(VP ", "(PP "):
guess = max(fragments[text], key=lambda x: sum(sumfunc(a) for a in fragments[text][x].items() if condition(a)) / norm(x))
try:
frag = max((a[0] for a in fragments[text][guess].iteritems() if condition(a) and a[0].startswith(label)), key=lambda x: (sumfunc((x,fragments[text][guess][x])), fragments[text][guess][x]))
except ValueError: pass
else:
f1 = Tree(frag)
f2 = Tree(frag)
print "%2d" % fragments[text][guess][frag], " ".join(a.replace(" ", "_")[:-1] for a in re.findall(r" \)|[^ )]+\)", frag)),
try: f2.un_chomsky_normal_form()
except: print f1.pprint(margin=9999, parens=("[", " ]"))
else: print f2.pprint(margin=9999, parens=("[", " ]"))