Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск русских слов на java / 19 сообщений из 19, страница 1 из 1
07.12.2013, 23:47:53
    #38492991
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Ребята, посмотрите плиз на код..Английские слова ищет прекрасно, а русские когда вводишь в поиск, не понимает он их-не находит в заданном разделе! как тут надо и что передать в inputstreamreader или дело в response??вот код логики поиска:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
public class Search {
	
	private String word;
	private String str="";
	private String str2="";
		
	        public String getWord() {
			return word;
		}

		public void setWord(String word) {
			this.word = word;
		}
		public String getStr() {
			return str;
		}

		public void setStr(String str) {
			this.str = str;
		}
		public String getStr2() {
			return str2;
		}

		public void setStr2(String str2) {
			this.str2 = str2;
		}
	    private final Pattern TITLE = Pattern.compile("\\<title\\>(.*)\\<\\/title\\>", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
	    
	    public String search(String url, String someword) {
	    	
	        try {
	            InputStreamReader in = new InputStreamReader(new URL(url).openStream());
	            StringBuilder input = new StringBuilder();
	            int ch;
	            while ((ch = in.read()) != -1) {
	                input.append((char) ch);
	            }
	            if (Pattern.compile(someword, Pattern.CASE_INSENSITIVE).matcher(input).find()) {
	                Matcher title = TITLE.matcher(input);
	                if (title.find()) {
	                    return title.group(1);
	                }
	            }
	        } catch (IOException e) {
	            e.printStackTrace();
	        } catch (PatternSyntaxException e) {
	            e.printStackTrace();
	        }
	        return null;
	    }
	    public String toString(){
	    	String[] argi = {"http://localhost:8080/site/endipnagradi"};
	    	String[] argi2 = {"http://localhost:8080/site/dipnagradi"};
	    	for (int i = 0; i < argi.length; i++) {
            String result = search(argi[i], word);
            if (result != null) {

            		str += "Search phrase " + "<b>"+ word + "</b>" + " have found " + "<a href=\"" + argi[i] + "\">" + result + "</a>"+ "<p></p>";
            }
            else  {
            	
            	str="Search word not found!";
            }   
            if (word == null||word=="") {
            	
            	str = "Enter the search word!";
            	str2 = "Введите слово для поиска!";
        		
            }
            }
	    	for (int i = 0; i < argi2.length; i++) {

	            String result2 = search(argi2[i], word);

	            if (result2 != null) {

			
str2 += "Поисковая фраза " + "<b>"+ word + "</b>" + " найдена в разделе " + "<a href=\"" + argi2[i] + "\">" + result2 + "</a>"+ "<p></p>";
 }
	            else{
	            	str2="Запрашиваемое слово не найдено!";
	            }    
	            
	            if (word == null||word=="") {
	            	
	            	str = "Enter the search word!";
	            	str2 = "Введите слово для поиска!";
	        		
	             }
	           }
		return null;
  }
}
...
Рейтинг: 0 / 0
08.12.2013, 00:55:33
    #38493013
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Fyn2013,

Измененный вариант метода search() :
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public String search(String url, String someword, String encoding) {
    
    try {
        InputStreamReader in = new InputStreamReader(new URL(url).openStream(), encoding);
        StringBuilder input = new StringBuilder();
        int ch;
        while ((ch = in.read()) != -1) {
            input.append((char) ch);
        }
        if (Pattern.compile(someword, Pattern.CASE_INSENSITIVE).matcher(input).find()) {
            Matcher title = TITLE.matcher(input);
            if (title.find()) {
                return title.group(1);
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (PatternSyntaxException e) {
        e.printStackTrace();
    }
    return null;
}    

Пример использования:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
for (String url: new String[] { "http://www.yandex.ru", "http://www.rambler.ru", "http://opennet.ru", "http://www.lib.ru" }) {
    for (String cs: new String[] { "UTF-8", "Cp866", "KOI8_R", "Cp1251" }) {
        String title = search(url, "Поиск", cs);
        if (title != null) {
            System.out.println(cs + " : " + title);
            break;
        }
    }
}
...
Рейтинг: 0 / 0
08.12.2013, 00:57:42
    #38493015
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Работает, но очень не оптимально.
Попытайтесь исправить сами.
...
Рейтинг: 0 / 0
08.12.2013, 01:16:50
    #38493027
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Usman,

у меня не работает..(( а какая при этом в jsp должна быть кодировка или кодировки?
я исправил и у меня пишет что Запрашиваемое слово не найдено когда я ввожу русское слово в поиск, хотя оно есть в том разделе...английский же вариант работает и находит
...
Рейтинг: 0 / 0
08.12.2013, 01:24:26
    #38493032
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Fyn2013у меня не работает..((Должно работать.Fyn2013а какая при этом в jsp должна быть кодировка или кодировки?Лучше UTF-8Fyn2013я исправил и у меня пишет что Запрашиваемое слово не найдено когда я ввожу русское слово в поискНужно поглядеть на Ваш исправленный вариант
...
Рейтинг: 0 / 0
08.12.2013, 01:31:52
    #38493035
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Usman,

на скорую руку исправил чтобы посмотреть как помогло, но поиск не видет запрашиваемоё русское слово..может надо было ещё в inputstreamreder-e перекодировать?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
public class Search {
	
	private String word;
	private String str="";
	private String str2="";
		
	public String getWord() {
			return word;
		}

		public void setWord(String word) {
			this.word = word;
		}
		public String getStr() {
			return str;
		}

		public void setStr(String str) {
			this.str = str;
		}
		public String getStr2() {
			return str2;
		}

		public void setStr2(String str2) {
			this.str2 = str2;
		}
	    private final Pattern TITLE = Pattern.compile("\\<title\\>(.*)\\<\\/title\\>", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
	    
	    public String search(String url, String someword, String encoding) {
	        
	        try {
	            InputStreamReader in = new InputStreamReader(new URL(url).openStream(), encoding);
	            StringBuilder input = new StringBuilder();
	            int ch;
	            while ((ch = in.read()) != -1) {
	                input.append((char) ch);
	            }
	            if (Pattern.compile(someword, Pattern.CASE_INSENSITIVE).matcher(input).find()) {
	                Matcher title = TITLE.matcher(input);
	                if (title.find()) {
	                    return title.group(1);
	                }
	            }
	        } catch (IOException e) {
	            e.printStackTrace();
	        } catch (PatternSyntaxException e) {
	            e.printStackTrace();
	        }
	        return null;
	    }    
	    public String toString(){
	    	String[] argi = {"http://localhost:8080/site/endipnagradi"};
	    	String[] argi2 = {"http://localhost:8080/site/dipnagradi"};
	  for (int i = 0; i < argi.length; i++) {
	    for (String cs: new String[] { "UTF-8", "Cp866", "KOI8_R", "Cp1251" }) {
            String result = search(argi[i], word, cs);
            if (result != null) {

            		str += "Search phrase " + "<b>"+ word + "</b>" + " have found " + "<a href=\"" + argi[i] + "\">" + result + "</a>"+ "<p></p>";
            }
            else  {
            	
            	str="Search word not found!";
            }   
            if (word == null||word=="") {
            	
            	str = "Enter the search word!";
            	str2 = "Введите слово для поиска!";
            }	
            }
            }
	    for (int i = 0; i < argi2.length; i++) {
	    	for (String cs: new String[] { "UTF-8", "Cp866", "KOI8_R", "Cp1251" }) {
	            
	    		String result2 = search(argi2[i], word, cs);

	            if (result2 != null) {

			
	str2 += "Поисковая фраза " + "<b>"+ word + "</b>" + " найдена в разделе " + "<a href=\"" + argi2[i] + "\">" + result2 + "</a>"+ "<p></p>";
 }
	            else{
	            	str2="Запрашиваемое слово не найдено!";
	            }    
	            
	            if (word == null||word=="") {
	            	
	            	str = "Enter the search word!";
	            	str2 = "Введите слово для поиска!";
	            }
	            }
	            }
		return null;

        }
	    
	}
...
Рейтинг: 0 / 0
08.12.2013, 01:33:13
    #38493037
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
и в jsp

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<c:if test="${pageContext.response.locale eq 'ru'}">
         <center><b>Поиск</b></center><p></p>
	<c:forEach items="${contactForm.str2}" var="str2">

               <p>${str2}</p>
			
		</c:forEach>
				</c:if>
				
			<c:if test="${pageContext.response.locale eq 'en'}">
			<center><b>Search</b></center><p></p>
					<c:forEach items="${contactForm.str}" var="str">
			
			<p>${str}</p>
			
		</c:forEach>
				</c:if>  
...
Рейтинг: 0 / 0
08.12.2013, 01:42:49
    #38493042
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Fyn2013,

Код: java
1.
2.
3.
4.
5.
6.
if (result != null) {
    str += "Search phrase " + ...;
    break;
} else {
    str2="Запрашиваемое слово не найдено!";
}
...
Рейтинг: 0 / 0
08.12.2013, 01:54:12
    #38493048
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Usman,

у меня str - для вывода найденных английских слов, а str2 - для русских..суть не в break, а в том, что вводимое в поиск русское слово не находится, хотя оно есть в разделе по url-у http://localhost:8080/site/dipnagradi
...
Рейтинг: 0 / 0
08.12.2013, 02:05:43
    #38493052
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Fyn2013,

Ашыпся при копи-пасте )))

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if (result != null) {
    str += "Search phrase "...
    break;
}
...
if (result2 != null) {
    str2 += "Поисковая фраза "...
    break;
}
...


Fyn2013суть не в break break нужен. (после нахождения фразы нужно выйти из цикла)
...
Рейтинг: 0 / 0
08.12.2013, 02:12:20
    #38493055
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Fyn2013что вводимое в поиск русское слово не находится
Код: sql
1.
2.
3.
4.
Search phrase <b>Поиск</b> have found <a href="http://www.yandex.ru">Яндекс</a><p></p>
Search phrase <b>Поиск</b> have found <a href="http://www.rambler.ru">Рамблер</a><p></p>
Search phrase <b>Поиск</b> have found <a href="http://opennet.ru">OpenNet без "www" - минималистский вариант портала по открытому ПО, Linux, BSD и Unix системам</a><p></p>
Search phrase <b>Поиск</b> have found <a href="http://www.lib.ru">Lib.Ru: Библиотека Максима Мошкова</a><p></p>

...
Рейтинг: 0 / 0
08.12.2013, 02:13:14
    #38493056
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Usman,

ок, добавил брик туда) но мой вопрос это не решило((поиск то не видит вводимого рашн слово((
...
Рейтинг: 0 / 0
08.12.2013, 02:14:45
    #38493057
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Usman,

у вас получилось? пришлите пожалуйста полностью вашу jsp страничку
...
Рейтинг: 0 / 0
08.12.2013, 02:19:49
    #38493063
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Fyn2013,

Консольное приложение:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
String[] argi = {"http://www.yandex.ru", "http://www.rambler.ru", "http://opennet.ru", "http://www.lib.ru"};
for (int i = 0; i < argi.length; i++) {
    for (String cs : new String[] { "UTF-8", "Cp866", "KOI8_R", "Cp1251" }) {
        String result = search(argi[i], word, cs);
        if (word == null || word == "") {
            str = "Enter the search word!";
        }
        if (result != null) {
            str = "Search phrase " + "<b>" + word + "</b>"
                    + " have found " + "<a href=\"" + argi[i] + "\">"
                    + result + "</a>" + "<p></p>";
            break;
        } else {
            str = "Search word not found!";
        }
    }
    System.out.println(str);
}
...
Рейтинг: 0 / 0
08.12.2013, 02:20:42
    #38493064
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Код: java
1.
2.
String str = "";
String word = "Поиск";
...
Рейтинг: 0 / 0
08.12.2013, 12:08:39
    #38493176
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Usman,

в консоли он у меня находит
Код: java
1.
2.
Search phrase <b>Поиск</b> have found <a href="http://www.yandex.ru">Яндекс</a><p></p>
Search phrase <b>Поиск</b> have found <a href="http://www.rambler.ru">Рамблер</a><p></p>



но в браузере пишет Запрашиваемое слово не найдено! Почему так может быть??
...
Рейтинг: 0 / 0
08.12.2013, 12:49:36
    #38493200
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Fyn2013,

Возможно класс Search неправильно работает, либо в JSTL-разметке что-то не так.
...
Рейтинг: 0 / 0
10.12.2013, 13:56:00
    #38495536
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
Usman,

получилось найти русские слова уже, везде выставил UTF-8 - и в pom.xml и в web.xml тоже
Но осталось подправить логику ещё..можете помочь? просто когда в массиве argi более одного раздела, он только начинает искать со второго раздела в массиве, хотя выставлено ж по всем пройтись от нуля..

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
public class Search {
	
	private String word;
	private String str="";;
		
	public String getWord() {
			return word;
		}

		public void setWord(String word) {
			this.word = word;
		}
		public String getStr() {
			return str;
		}

		public void setStr(String str) {
			this.str = str;
		}

	    private final Pattern TITLE = Pattern.compile("\\<title\\>(.*)\\<\\/title\\>", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
	    
	    public String search(String url, String someword) {
	    	
	        try {
	            InputStreamReader in = new InputStreamReader(new URL(url).openStream(),"UTF-8");
	            StringBuilder input = new StringBuilder();
	            int ch;
	            while ((ch = in.read()) != -1) {
	                input.append((char) ch);
	            }
	            if (Pattern.compile(someword, Pattern.CASE_INSENSITIVE).matcher(input).find()) {
	                Matcher title = TITLE.matcher(input);
	                if (title.find()) {
	                    return title.group(1);
	                }
	            }
	        } catch (IOException e) {
	            e.printStackTrace();
	        } catch (PatternSyntaxException e) {
	            e.printStackTrace();
	        }
	        return null;
	    }
	    public String toString(){
	
	    	String[] argi = {"http://localhost:8080/site/dipnagradi","http://localhost:8080/site/contacts"};
            
	    	for (int i = 0; i < argi.length; i++) {

	            String result = search(argi[i], word);

	            if (result != null) {

			
	str+= "Поисковая фраза " + "<b>"+ word + "</b>" + " найдена в разделе " + "<a href=\"" + argi[i] + "\">" + result + "</a>"+ "<p></p>";

 }
	            else{
	            	str="Запрашиваемое слово не найдено!";
	            }    

	            if (word == null||word=="") {

	            	str = "Введите слово для поиска!";
	        		

                }
	    }
		return null;

          }
	    
    }
...
Рейтинг: 0 / 0
10.12.2013, 17:33:20
    #38495936
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск русских слов на java
отменяю, уже разобрался!но вы тоже до этого сделали большой вклад в это, за что говорю спасибо!
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск русских слов на java / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]