亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? count-parses.c

?? SVMcfg: Learns a weighted context free grammar from examples. Training examples (e.g. for natural la
?? C
字號:
/* count-parses.c
 *
 * Mark Johnson, 27th August 1998
 *
 * Modified from cky.c; counts the total number of parses, not counting
 * unary rule cycles
 */

#include "local-trees.h"
#include "mmm.h"		/* memory debugger */
#include "hash-string.h" 	/* hash tables and string-index tables */
#include "tree.h"
#include "vindex.h"
#include "ledge.h"
#include "grammar.h"
#include "hash.h"
#include "hash-templates.h"

#include <assert.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>

#define RAND_SEED	time(0)

#define CHART_SIZE(n)			(n)*((n)+1)/2
#define CHART_ENTRY(chart, i, j)	chart[(j)*((j)-1)/2+(i)]

typedef struct chart_cell {
  bintree	tree;
  FLOAT         nparses;
} chart_cell;

static chart_cell chart_cell_null = {NULL, 0.0};

/* chart_cell_free() frees the memory associated with this chart cell.
 * A chart cell has a tree associated with it, but since every tree
 * node is associated with exactly one chart cell, only free the
 * top-most node of each tree.
 */

static void
chart_cell_free(chart_cell cell)
{
  FREE_BINTREE(cell.tree);	/* subtree will be freed when other cells are freed */
}

HASH_HEADER(sihashcc, si_index, chart_cell)
HASH_CODE(sihashcc, si_index, chart_cell, IDENTITY, NEQ, IDENTITY, NO_OP, chart_cell_null, chart_cell_free)

typedef sihashcc *chart;

chart
chart_make(size_t n)
{
  size_t  i, nn = CHART_SIZE(n);
  chart   c = MALLOC(nn*sizeof(sihashcc));
  
  for (i=0; i<nn; i++) 
    c[i] = NULL;	/* chart cell will be constructed in apply_unary() */ 
  
  return c;
}

void
chart_free(chart c, size_t n)
{
  size_t i;

  for (i=0; i<CHART_SIZE(n); i++)
    free_sihashcc(c[i]);

  FREE(c);
}

void
chart_entry_display(FILE *fp, sihashcc chart_entry, si_t si)
{
  sihashccit hit;

  for (hit=sihashccit_init(chart_entry); sihashccit_ok(hit); hit = sihashccit_next(hit)) {
    fprintf(fp, "\n %s: %g \t", si_index_string(si, hit.key), (double) hit.value.nparses);
    if (hit.value.tree) {
      tree t = bintree_tree(hit.value.tree, si);
      write_tree(fp, t, si);
      free_tree(t);
    }
    else
      fprintf(fp, "NULL");
  }
  fprintf(fp, "\n---\n");
}
  
static chart_cell *
add_edge(sihashcc chart_entry, si_index label, bintree left, bintree right,
	 FLOAT nparses)
{
  chart_cell	*cp = sihashcc_valuep(chart_entry, label);

  if (!cp->tree) {  /* construct a new chart entry */
    bintree tree = NEW_BINTREE;
    tree->label = label;
    tree->left = left;
    tree->right = right;
    cp->tree = tree;
    cp->nparses = nparses;
    return cp;
  }

  /* we're dealing with an old chart entry */

  assert(cp->tree->label==label);
  cp->nparses += nparses;
  return NULL;
}

static void 
follow_unary(chart_cell *child_cell, sihashcc chart_entry, grammar g)   /* follow this unary rule */
{
  int	 i;
  urules urs = sihashurs_ref(g.urs, child_cell->tree->label);

  for (i=0; i<urs.n; i++) {
    chart_cell *parent_cell;

    if (parent_cell = add_edge(chart_entry, urs.e[i]->parent, child_cell->tree, NULL,
			       child_cell->nparses))
      follow_unary(parent_cell, chart_entry, g);
  }}

static void
apply_unary(sihashcc chart_entry, grammar g)
{
  sihashursit	ursit;
  size_t	i;

  for (ursit=sihashursit_init(g.urs); sihashursit_ok(ursit); ursit = sihashursit_next(ursit)) {
    chart_cell c;
    c = sihashcc_ref(chart_entry, ursit.key);	/* look up the rule's child category */
    if (c.tree)					/* such categories exist in this cell */
      for (i=0; i<ursit.value.n; i++) {
	chart_cell *cp;

	if (cp = add_edge(chart_entry, ursit.value.e[i]->parent, c.tree, NULL, 
			  c.nparses))
	  follow_unary(cp, chart_entry, g);
      }}}


static void
apply_binary(sihashcc parent_entry, sihashcc left_entry, sihashcc right_entry, grammar g)
{
  sihashbrsit	brsit;
  size_t	i;

  for (brsit=sihashbrsit_init(g.brs); sihashbrsit_ok(brsit); brsit = sihashbrsit_next(brsit)) {
    chart_cell cl;
    cl = sihashcc_ref(left_entry, brsit.key);	/* look up the rule's left category */
    if (cl.tree)				/* such categories exist in this cell */
      for (i=0; i<brsit.value.n; i++) {
	chart_cell cr;
	cr = sihashcc_ref(right_entry, brsit.value.e[i]->right);
	if (cr.tree) 
	  add_edge(parent_entry, brsit.value.e[i]->parent, cl.tree, cr.tree, 
		   cl.nparses * cr.nparses);
      }}}

chart
cky(struct vindex terms, grammar g, si_t si)
{
  int i, left, right, mid;
  chart c;

  c = chart_make(terms.n);
  
  /* insert lexical items */

  for (left=0; left< (int) terms.n; left++) {
    si_index	label = terms.e[left];
    urules      urs;
    sihashcc	chart_entry = make_sihashcc(NLABELS);
    bintree	bt  = NEW_BINTREE;
    chart_cell	cell;

    cell.tree = bt;
    cell.nparses = 1.0;
    CHART_ENTRY(c, left, left+1) = chart_entry;
    bt->left = bt->right = NULL;
    bt->label = label;
    sihashcc_set(chart_entry, label, cell);

    follow_unary(&cell, chart_entry, g);      		/* close under unary rules */

    /* fprintf(stderr, "Chart entry %d-%d\n", (int) left, (int) left+1);
       chart_entry_display(stderr, CHART_ENTRY(c,left,left+1), si); */
    
  }

  for (right=2; right<= (int) terms.n; right++)
    for (left=right-2; left>=0; left--) {
      sihashcc chart_entry = make_sihashcc(CHART_CELLS);   
      CHART_ENTRY(c, left, right) = chart_entry;

      for (mid=left+1; mid<right; mid++) 
	apply_binary(chart_entry, CHART_ENTRY(c,left,mid), CHART_ENTRY(c,mid,right), g);

      apply_unary(chart_entry, g);
      /*
      printf("Chart entry %d-%d\n", (int) left, (int) right);
      chart_entry_display(CHART_ENTRY(c,left,right), si);
      */
    }

  return c;
}

static vindex
read_terms(FILE *fp, si_t si)
{
  size_t i = 0, nsize = 10;
  vindex v = make_vindex(nsize);
  si_index term;

  while ((term = read_cat(fp, si))) {
    if (i >= nsize) {
      nsize *= 2;
      vindex_resize(v, nsize);
    }
    assert(i < nsize);
    vindex_ref(v,i++) = term;
  }
 
  if (i > 0) {
    v->n = i;
    vindex_resize(v, v->n);
    return (v);
  }
  else {
    vindex_free(v);
    return(NULL);
  }
}

int      
main(int argc, char **argv)
{
  si_t          si = make_si(1024);
  FILE          *grammarfp = stdin, *yieldfp;
  FILE		*tracefp = NULL;  	/* trace output */
  FILE		*summaryfp = stderr;	/* end of parse stats output */
  FILE		*parsefp = NULL;        /* parse trees */
  FILE		*nparsefp = stdout;     /* parse count */

  chart_cell	root_cell;
  grammar	g;
  chart		c;
  vindex 	terms;
  int		maxsentlen = 0;
  int           sentenceno = 0, parsed_sentences = 0, failed_sentences = 0;
  double	sum_nparses = 0;

  srand(RAND_SEED);	/* seed random number generator */

  if (argc<2 || argc>4) {
    fprintf(stderr, "%s yieldfile [maxsentlen [grammarfile]]\n", argv[0]);
    exit(EXIT_FAILURE);
  }

  if ((yieldfp = fopen(argv[1], "r")) == NULL) {
    fprintf(stderr, "%s: Couldn't open yieldfile %s\n", argv[0], argv[1]);
    exit(EXIT_FAILURE);
  }

  if (argc >= 3)
    if (!sscanf(argv[2], "%d", &maxsentlen)) {
      fprintf(stderr, "%s: Couldn't parse maxsentlen %s\n", argv[0], argv[2]);
      exit(EXIT_FAILURE);
    }

  if (argc >= 4)
    if ((grammarfp = fopen(argv[3], "r")) == NULL) {
      fprintf(stderr, "%s: Couldn't open grammarfile %s\n", argv[0], argv[3]);
      exit(EXIT_FAILURE);
    }
   
  g = read_grammar(grammarfp, si);
  /* write_grammar(tracefp, g, si); */

  while ((terms = read_terms(yieldfp, si))) {
    sentenceno++;

    if (!maxsentlen || (int) terms->n <= maxsentlen) { /* skip if sentence is too long */
      size_t	i;

      if (tracefp) {
	fprintf(tracefp, "\nSentence %d:\n", sentenceno);
	for (i=0; i<terms->n; i++)
	  fprintf(tracefp, " %s", si_index_string(si, terms->e[i]));
	fprintf(tracefp, "\n");
      }
     
      c = cky(*terms, g, si);

      /* fetch best root node */

      root_cell = sihashcc_ref(CHART_ENTRY(c, 0, terms->n), si_string_index(si, ROOT));

      if (root_cell.tree) {
	tree parse_tree = bintree_tree(root_cell.tree, si);
	double nparses = (double) root_cell.nparses;

	parsed_sentences++;
	assert(nparses > 0.0);
	sum_nparses += nparses;

	if (nparsefp) 
	  fprintf(nparsefp, "Sentence %d, nparses = %g\n", sentenceno, nparses);

	if (parsefp)
	  write_prolog_tree(parsefp, parse_tree, si);

	free_tree(parse_tree);
      }
      else {
	failed_sentences++;
	if (tracefp)
	  fprintf(tracefp, "Failed to parse\n");
	if (parsefp)
	  fprintf(parsefp, "parse_failure.\n");
      }
      chart_free(c, terms->n);			/* free the chart */
    }
    else { 					/* sentence too long */
      if (parsefp)
	fprintf(parsefp, "too_long.\n");
    }

    vindex_free(terms);				/*  free the terms */
    assert(trees_allocated == 0);
    assert(bintrees_allocated == 0);
  }
  free_grammar(g);
  si_free(si);

  if (summaryfp) {
    fprintf(summaryfp, "\n%d/%d = %g%% test sentences met the length criteron, of which %d/%d = %g%% were parsed\n", 
	    parsed_sentences+failed_sentences, sentenceno,
	    (double) (100.0 * (parsed_sentences+failed_sentences)) / sentenceno,
	    parsed_sentences, parsed_sentences+failed_sentences, 
	    (double) (100.0 * parsed_sentences) / (parsed_sentences + failed_sentences));
    fprintf(summaryfp, "sum_nparses = %g\n", sum_nparses);
  }

  assert(mmm_blocks_allocated == 0);		/* check that everything has been deallocated */
  exit(EXIT_SUCCESS);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品日韩成人av| 国产无一区二区| 亚洲电影欧美电影有声小说| 久久亚洲综合色一区二区三区 | 国产剧情一区在线| 97精品久久久午夜一区二区三区| 欧美二区三区的天堂| 国产精品高潮呻吟| 国产一区二区中文字幕| 欧美日韩免费观看一区二区三区| 中文字幕免费不卡| 九九视频精品免费| 欧美精品在线视频| 亚洲一区二区三区国产| www.一区二区| 国产偷国产偷精品高清尤物| 免费观看久久久4p| 欧美日韩三级视频| 亚洲精品成人a在线观看| 成人av综合一区| 国产校园另类小说区| 麻豆91在线观看| 欧美一级夜夜爽| 日韩国产成人精品| 5858s免费视频成人| 亚洲精品免费播放| 欧美伊人久久久久久久久影院 | 欧美成人性战久久| 蜜臀av性久久久久蜜臀av麻豆| 欧美日精品一区视频| 亚洲一区在线观看视频| 91福利精品视频| 一区二区久久久| 欧美三级韩国三级日本一级| 一个色妞综合视频在线观看| 色av综合在线| 亚洲在线视频网站| 欧美日韩国产一级| 日韩电影网1区2区| 欧美va亚洲va| 国产精品一二三四区| 国产欧美一区二区精品婷婷| 国产成人精品免费网站| 欧美国产激情一区二区三区蜜月| 成人91在线观看| 一区二区在线观看免费视频播放| 日本福利一区二区| 香蕉成人啪国产精品视频综合网| 91.com视频| 国产真实乱偷精品视频免| 国产精品久线在线观看| 色综合激情五月| 日韩电影在线免费| 国产午夜亚洲精品羞羞网站| www.一区二区| 天堂成人免费av电影一区| 日韩欧美www| 国产精品1区二区.| 一区二区三区四区激情| 欧美日韩不卡在线| 国产成人免费在线观看不卡| 1024国产精品| 91麻豆精品国产91久久久使用方法| 免费av成人在线| 中文字幕av不卡| 欧美色区777第一页| 在线精品亚洲一区二区不卡| 久久99在线观看| 欧美老女人在线| 中文在线一区二区| 欧美在线不卡视频| 久久 天天综合| 亚洲一级电影视频| 久久久噜噜噜久久中文字幕色伊伊 | 日韩亚洲欧美一区| 波波电影院一区二区三区| 天天射综合影视| 亚洲视频在线一区| 精品成人免费观看| 欧美视频日韩视频| 国产成人亚洲综合色影视| 亚洲高清免费观看| 中文字幕一区二区三区在线不卡 | 在线播放国产精品二区一二区四区 | 久久久久久久久久久99999| 色婷婷精品大在线视频| 国产精品自拍av| 水野朝阳av一区二区三区| 国产精品久久久久久福利一牛影视| 欧美精品精品一区| 色老头久久综合| 成人高清在线视频| 国产做a爰片久久毛片| 性久久久久久久| 一区二区成人在线观看| 国产精品久久久久久久久久免费看| 日韩一级在线观看| 91精品国产91久久久久久一区二区 | 欧美大片在线观看| 欧美区一区二区三区| 色先锋久久av资源部| 丁香桃色午夜亚洲一区二区三区| 男女激情视频一区| 日韩精品亚洲一区二区三区免费| 亚洲免费在线视频一区 二区| 国产网站一区二区| 国产亲近乱来精品视频| 久久亚洲捆绑美女| 久久日韩粉嫩一区二区三区| 欧美大肚乱孕交hd孕妇| 欧美电影免费观看完整版| 91.麻豆视频| 日韩一区二区麻豆国产| 日韩免费电影网站| 91精品国产欧美一区二区成人| 欧美日韩精品是欧美日韩精品| 欧美在线一二三| 欧美猛男男办公室激情| 69久久夜色精品国产69蝌蚪网| 4438成人网| 日韩一级二级三级| 久久亚洲一区二区三区明星换脸| 亚洲精品一区在线观看| 国产日韩欧美精品在线| 欧美高清在线视频| 亚洲桃色在线一区| 水野朝阳av一区二区三区| 蜜臀精品久久久久久蜜臀| 久久福利资源站| 成人一区二区在线观看| 91久久久免费一区二区| 欧美亚一区二区| 91精品婷婷国产综合久久| 欧美大胆人体bbbb| 国产精品传媒入口麻豆| 亚洲自拍偷拍欧美| 美女脱光内衣内裤视频久久影院| 国产一区二区三区精品欧美日韩一区二区三区 | 精品视频在线看| 欧美一二三四区在线| 国产午夜精品在线观看| 成人免费一区二区三区视频| 图片区日韩欧美亚洲| 狠狠久久亚洲欧美| 91福利视频在线| 欧美精品一区二区三区蜜桃| 中文字幕人成不卡一区| 天天做天天摸天天爽国产一区| 国内偷窥港台综合视频在线播放| 国产成人精品在线看| 欧美亚洲动漫精品| 国产亚洲视频系列| 婷婷激情综合网| 成人国产在线观看| 日韩欧美视频在线| 亚洲老妇xxxxxx| 国产精品一线二线三线| 欧美日韩五月天| 国产精品二区一区二区aⅴ污介绍| 亚洲一区二区成人在线观看| 国产91精品露脸国语对白| 欧美肥胖老妇做爰| 亚洲天堂久久久久久久| 国模冰冰炮一区二区| 欧美三级电影在线观看| 日韩伦理免费电影| 国产一区999| 欧美一区二区精品久久911| 亚洲免费在线看| 成人午夜av影视| 久久久亚洲综合| 日韩成人伦理电影在线观看| 91官网在线免费观看| 亚洲国产精品ⅴa在线观看| 久久99久久99精品免视看婷婷| 欧美视频在线播放| 亚洲日本成人在线观看| 国产成人精品www牛牛影视| 538prom精品视频线放| 亚洲最大色网站| 91在线你懂得| 欧美国产1区2区| 成人黄页毛片网站| 国产亚洲婷婷免费| 国产精品自拍毛片| 2023国产精华国产精品| 毛片av一区二区| 欧美一区二区视频在线观看| 亚洲大尺度视频在线观看| 一本色道综合亚洲| 成人欧美一区二区三区黑人麻豆| 国产精品羞羞答答xxdd| 久久精品夜色噜噜亚洲a∨| 免费观看在线综合| 日韩三级电影网址| 久久99精品久久久久婷婷| 日韩精品一区二区三区四区视频| 毛片不卡一区二区| 久久日一线二线三线suv| 国产在线播精品第三|