当前位置:   article > 正文

自然语言处理之判断句子合法性的Chart-Parsing算法_判断一句话是否符合合法 算法

判断一句话是否符合合法 算法
  1. package nlp;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4. import java.util.*;
  5. import java.util.Map.Entry;
  6. class ChartLine{
  7. public String wordAttr;
  8. public int start;
  9. public int end;
  10. public ChartLine(String wordAttr,int start,int end){
  11. this.wordAttr=wordAttr;
  12. this.start=start;
  13. this.end=end;
  14. }
  15. public ChartLine(AgendaELement agEl){
  16. this.wordAttr=agEl.wordAttr;
  17. this.start=agEl.start;
  18. this.end=agEl.end;
  19. }
  20. }
  21. class ActivityLine{
  22. public String key;
  23. public String value;
  24. public int start;
  25. public int end;
  26. public int posStart;
  27. public int posEnd;
  28. public ActivityLine(String key,String value,int start,int end,int posStart,int posEnd){
  29. this.key=key;
  30. this.value=value;
  31. this.start=start;
  32. this.end=end;
  33. this.posStart=posStart;
  34. this.posEnd=posEnd;
  35. }
  36. }
  37. class AgendaELement{
  38. public String wordAttr;
  39. public int start;
  40. public int end;
  41. public AgendaELement(String wordAttr,int start,int end){
  42. this.wordAttr=wordAttr;
  43. this.start=start;
  44. this.end=end;
  45. }
  46. }
  47. public class Proj3 {
  48. public HashMap<String,String[]> grammers=new HashMap<String,String[]>();
  49. public HashMap<String,String[]> wordsAttrs=new HashMap<String,String[]>();
  50. public ArrayList<ChartLine> chart=new ArrayList<ChartLine>();
  51. public ArrayList<ActivityLine> activities=new ArrayList<ActivityLine>();
  52. public ArrayList<AgendaELement> agenda=new ArrayList<AgendaELement>();
  53. public Proj3(){
  54. grammers.put("S",new String[]{"NP,VP"});
  55. grammers.put("NP",new String[]{"ART,N","ART,ADJ,N"});
  56. grammers.put("VP",new String[]{"V","V,NP"});
  57. wordsAttrs.put("ART",new String[]{"The","a"});
  58. wordsAttrs.put("N",new String[]{"cat","mouse","dog"});
  59. wordsAttrs.put("V",new String[]{"caught","eat","walk"});
  60. }
  61. public void handle(String sentence){
  62. String[]words=sentence.split(" ");
  63. int index=0;
  64. while(index<words.length){
  65. String word=words[index];
  66. Iterator<Entry<String,String[]>> ite=wordsAttrs.entrySet().iterator();
  67. String attr="";
  68. while(ite.hasNext()){
  69. Entry<String,String[]> entry=ite.next();
  70. String key=entry.getKey();
  71. String []valueTemp=entry.getValue();
  72. for(String value:valueTemp){
  73. if(value.equals(word))
  74. attr=key;
  75. }
  76. }
  77. AgendaELement agEl=new AgendaELement(attr,index+1,index+2);
  78. agenda.add(agEl);
  79. while(agenda.size()>0){
  80. AgendaELement ele=agenda.remove(0);
  81. ChartLine line=new ChartLine(ele);
  82. //添加图标中
  83. chart.add(line);
  84. Iterator<Entry<String,String[]>> gIte=grammers.entrySet().iterator();
  85. while(gIte.hasNext()){
  86. Entry<String,String[]> entry=gIte.next();
  87. String gKey=entry.getKey();
  88. String[]gValue=entry.getValue();
  89. for(String g:gValue){
  90. if(g.startsWith(ele.wordAttr)){
  91. String[]ss=g.split(",");
  92. if(ss.length>1&&ss[0].equals(ele.wordAttr)){
  93. ActivityLine aLine=new ActivityLine(gKey,g,ele.start,ele.end,1,2);
  94. //添加活动边
  95. activities.add(aLine);
  96. }else if(ss.length==1){
  97. agenda.add(new AgendaELement(gKey,ele.start,ele.end));
  98. }
  99. }
  100. }
  101. }
  102. //查找活动边
  103. for(int i=0;i<activities.size();i++){
  104. ActivityLine aLine2=activities.get(i);
  105. String graKey=aLine2.key;
  106. String gra=aLine2.value;
  107. String[]ws=gra.split(",");
  108. if(ele.start==aLine2.end&&ele.wordAttr.equals(ws[aLine2.posStart])){
  109. if(aLine2.posStart!=ws.length-1){
  110. ActivityLine aLine3=new ActivityLine(graKey,gra,aLine2.start,ele.end,aLine2.posStart+1,aLine2.end+1);
  111. activities.add(aLine3);
  112. }else{
  113. agenda.add(new AgendaELement(graKey,aLine2.start,ele.end));
  114. }
  115. }
  116. }
  117. }
  118. index++;
  119. }
  120. }
  121. public static void main(String args[]) throws Exception{
  122. Proj3 p=new Proj3();
  123. while(true){
  124. BufferedReader buffer=new BufferedReader(new InputStreamReader(System.in));
  125. String str=buffer.readLine();
  126. p.handle(str);
  127. ArrayList<ChartLine> arr=p.chart;
  128. boolean flag=false;
  129. for(int i=0;i<arr.size();i++){
  130. ChartLine line=arr.get(i);
  131. String[]words=str.split(" ");
  132. if(line.start==1&&line.end==words.length+1&&line.wordAttr=="S")
  133. flag=true;
  134. }
  135. if(flag)
  136. System.out.println("这个句子是合法的");
  137. else
  138. System.out.println("这个句子是不合法的");
  139. }
  140. }
  141. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/348047?site
推荐阅读
相关标签
  

闽ICP备14008679号