📄 nlp.java
字号:
}
if (eatWord(equals)==false) return;
if (currentWordIndex<currentWords.length) {
searchString=currentWords[currentWordIndex];
}
}
public String getSQL() {
if (currentAction==NO_OP) {
System.out.println("getSQL(): currentAction is NO_OP!");
return "";
}
if (currentAction==LIST) {
// Start by making sure that the 'tableName' string does not
// include any tables that are not referenced in column name
// string:
int index = displayColumnName.indexOf(".");
if (index>-1) {
tableName = displayColumnName.substring(0,index);
}
if (searchColumnName!=null) {
index = searchColumnName.indexOf(".");
if (index>-1) {
searchColumnName = tableName + searchColumnName.substring(index);
}
}
if (searchColumnName2!=null) {
index = searchColumnName2.indexOf(".");
if (index>-1) {
searchColumnName2 = tableName + searchColumnName2.substring(index);
}
}
if (searchColumnName3!=null) {
index = searchColumnName3.indexOf(".");
if (index>-1) {
searchColumnName3 = tableName + searchColumnName3.substring(index);
}
}
StringBuffer sb = new StringBuffer();
sb.append("SELECT ");
if (displayColumnName!=null) sb.append(displayColumnName);
else sb.append("*");
if (time_after!=null && time_after.valid()) {
if (searchColumnName!=null) {
sb.append(" FROM " + tableName + " WHERE " + searchColumnName +
" > '" + time_after.toString() + "'");
// Note: for Microsoft Access: both ' should be # in last line
} else {
sb.append(" FROM " + tableName);
}
} else if (time_before!=null && time_before.valid()) {
if (searchColumnName!=null) {
sb.append(" FROM " + tableName + " WHERE " + searchColumnName +
" < #" + time_before.toString() + "#");
} else {
sb.append(" FROM " + tableName);
}
} else if (compareMode!=NONE && quantity!=-999.0f) {
if (compareMode==LESS) {
if (searchColumnName!=null) {
sb.append(" FROM " + tableName + " WHERE " + searchColumnName +
" < " + quantity);
} else {
sb.append(" FROM " + tableName);
}
} else { // MORE
if (searchColumnName!=null) {
sb.append(" FROM " + tableName + " WHERE " + searchColumnName +
" > " + quantity);
} else {
sb.append(" FROM " + tableName);
}
}
} else {
if (searchColumnName!=null) {
sb.append(" FROM " + tableName + " WHERE " + searchColumnName +
" = " + quoteLiteral(searchString));
} else {
sb.append(" FROM " + tableName);
}
}
if (searchString2!=null && conditionMode==AND) {
sb.append(" AND " + searchColumnName2 + " = " +
quoteLiteral(searchString2));
}
if (searchString2!=null && conditionMode==OR) {
sb.append(" OR " + searchColumnName2 + " = " +
quoteLiteral(searchString2));
}
//sb.append(" ;");
return new String(sb);
}
return "";
}
public String toEnglish(String [] r, String [] syns,
String [] origs, int num,
int num_rows_from_database) {
int count = r.length / num_rows_from_database;
StringBuffer sb = new StringBuffer();
for (int ii=0; ii<num_rows_from_database; ii++) {
sb.append("The value of ");
for (int i=0; i<count; i++) {
String s = temp_col_names[i];
// check for synonym substitution:
for (int j=0; j<num; j++) {
if (s.equalsIgnoreCase(syns[j])) {
s = origs[j];
}
}
sb.append(s + " is " + r[i + (ii * count)]);
if (i<count - 2) sb.append(", ");
if (i==count- 2) sb.append(" and ");
}
sb.append(".\n");
}
return new String(sb);
}
// String constants need ' ' marks, while numbers can
// not have surrounding ' ' marks:
private String quoteLiteral(String s) {
if (s.startsWith("0")) return s;
if (s.startsWith("1")) return s;
if (s.startsWith("2")) return s;
if (s.startsWith("3")) return s;
if (s.startsWith("4")) return s;
if (s.startsWith("5")) return s;
if (s.startsWith("6")) return s;
if (s.startsWith("7")) return s;
if (s.startsWith("8")) return s;
if (s.startsWith("9")) return s;
return "'" + s + "'";
}
// Semantic action codes:
public final static int NO_OP=0;
public final static int LIST=1;
public final static int DELETE_DATA=2;
public final static int MODIFY_DATA=3;
public final static int NONE=0;
public final static int LESS=1;
public final static int MORE=2;
private String show[] = {"show", "list", "display"};
private String noise1[] = {"data", "info", "information", "any", "all", "everything"};
private String where[] = {"where"};
private String equals[] = {"equals", "contains"};
private String is[] = {"is"};
private String equals_is[] = {"equals", "contains", "is"};
private String after[] = {"after"};
private String before[] = {"before"};
private String and[] = {"and"};
private String or[] = {"or"};
private String less[] = {"less", "smaller"};
private String more[] = {"more", "greater", "larger"};
private String than[] = {"than"};
private int currentAction=NO_OP;
private String displayColumnName = null;
private String searchColumnName = null;
private String searchString=null;
private String searchColumnName2 = null;
private String searchString2=null;
private String searchColumnName3 = null;
private String searchString3=null;
private int conditionMode = 0;
private String tableName="";
private SmartDate time_after = null;
private SmartDate time_before= null;
private float quantity=-999.0f;
private int compareMode=NONE;
private String currentWords[];
private int currentWordIndex=0;
private boolean eatWord(String s[]) {
if (currentWordIndex>=currentWords.length) {
return false;
}
for (int i=0; i<s.length; i++) {
if (currentWords[currentWordIndex].equalsIgnoreCase(s[i])) {
currentWordIndex++;
return true;
}
}
return false;
}
private String eatColumnName(String current_column_name) {
if (currentWordIndex>=currentWords.length) {
return null;
}
// Check for a column name of the form <Table name>.<column name>:
if (current_column_name!=null) {
int index = current_column_name.indexOf(".");
if (index>-1) {
current_column_name = current_column_name.substring(index+1);
}
}
String ret_col_name=null;
for (int i=0; i<dbinfo.numTables; i++) {
for (int j=0; j<dbinfo.columnNames[i].length; j++) {
if (currentWordIndex>=currentWords.length) break;
if (currentWords[currentWordIndex].equalsIgnoreCase(dbinfo.columnNames[i][j])) {
if (current_column_name!=null &&
current_column_name.indexOf(dbinfo.columnNames[i][j]) >-1)
continue;
currentWordIndex++;
temp_col_names[num_temp_col_names++] = dbinfo.columnNames[i][j];
if (tableName==null) {
tableName=dbinfo.tableNames[i];
} else {
if (tableName.equalsIgnoreCase(dbinfo.tableNames[i])==false) {
tableName=tableName + ", " + dbinfo.tableNames[i];
}
}
if (ret_col_name==null) {
ret_col_name=dbinfo.tableNames[i] + "." + dbinfo.columnNames[i][j];
} else {
if (ret_col_name.equalsIgnoreCase(dbinfo.columnNames[i][j])==false) {
ret_col_name=ret_col_name + ", " +
dbinfo.tableNames[i] + "." + dbinfo.columnNames[i][j];
}
}
}
}
}
return ret_col_name;
}
private DBInfo dbinfo;
private String [] temp_col_names = new String[11];
private int num_temp_col_names = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -