Comments 16
Отличная вещь, пригодится! Спасибо!
0
на сколько я вижу это не настоящее расстояние Домерау-Левенштейна, а Optimal String Alignment; настоящий DL алгоритм разрешает повторное редактирование подстрок, в то время как OSA не может этого делать, там же в педивикии есть пример
приведенный алгоритм дла «CA» и «ABC» выдает 3, а нужно 2
тут вы тоже не правы, Дамерау в статье выдвигает гипотезу, что 80% всех типов опечаток входит в множество из 4 типов {удаление, вставка, замена, перестановка соседних}
приведенный алгоритм дла «CA» и «ABC» выдает 3, а нужно 2
Данный алгоритм не учитывает транспозиционные ошибки, которыми являются 80% при наборе текста (данные с википедии).
тут вы тоже не правы, Дамерау в статье выдвигает гипотезу, что 80% всех типов опечаток входит в множество из 4 типов {удаление, вставка, замена, перестановка соседних}
+1
приведенный алгоритм дла «CA» и «ABC» выдает 3, а нужно 2
Да, вы правы. Кроме того, мой алгоритм возвращает неправильные ошибки.
тут вы тоже не правы, Дамерау в статье выдвигает гипотезу, что 80% всех типов опечаток входит в множество из 4 типов {удаление, вставка, замена, перестановка соседних}
Значит информация в википедии неверна. Там написано: «Дамерау показал, что 80 % ошибок при наборе текста человеком являются транспозициями.»
0
Молодцы конечно.
Пару мелочей от зануды.
1- protected RestClient _client = new RestClient(«translate.yandex.net/api/v1.5/tr/»); — обычно считается плохим тоном, тк строка забита жестко.
2- www.nuget.org/packages?q=yandex выложите сюда. Основная проблема на моей памяти со всеми библиотеками, что их найти тяжело. Nuget- это то место от куда все пакеты и качают и начинают их искать.
Пару мелочей от зануды.
1- protected RestClient _client = new RestClient(«translate.yandex.net/api/v1.5/tr/»); — обычно считается плохим тоном, тк строка забита жестко.
2- www.nuget.org/packages?q=yandex выложите сюда. Основная проблема на моей памяти со всеми библиотеками, что их найти тяжело. Nuget- это то место от куда все пакеты и качают и начинают их искать.
+2
Спасибо за замечания. Я все исправлю.
0
Ну до «наггета» еще далеко.
Вообще выглядят странными конструкции вида:
В классе у которого нет наследников.
А если брать глобальнее, то:
1. Отсутствие асинхронного API
2. Куча повторяющихся кусков кода, как то:
Или вот такой паттерн, встречается многократно
Это все, явные кандидаты на какое-то абстрагирование.
3. Хоть гуевое приложение в «наггет» не пойдет, но в нем все сетевые вызовы синхронны.
Вообще выглядят странными конструкции вида:
public class Dictionary
{
protected RestClient _client = new RestClient("https://dictionary.yandex.net/api/v1/dicservice/");
protected string _key;
...
}
В классе у которого нет наследников.
А если брать глобальнее, то:
1. Отсутствие асинхронного API
2. Куча повторяющихся кусков кода, как то:
RestRequest request = new RestRequest("getLangs");
request.AddParameter("key", _key);
RestResponse response = (RestResponse)_client.Execute(request);
XmlAttributeDeserializer deserializer = new XmlAttributeDeserializer();
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
var strs = deserializer.Deserialize<List<string>>(response);
var allLangs = (Lang[])Enum.GetValues(typeof(Lang));
Lang[] result = allLangs.Where(lang => strs.Contains(lang.ToString().ToLowerInvariant())).ToArray();
return result;
}
else
{
var error = deserializer.Deserialize<YandexError>(response);
throw new YandexLinguisticsException(error);
}
Или вот такой паттерн, встречается многократно
RestResponse response = (RestResponse)_client.Execute(request);
XmlAttributeDeserializer deserializer = new XmlAttributeDeserializer();
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
...
}
else
{
...
}
Это все, явные кандидаты на какое-то абстрагирование.
3. Хоть гуевое приложение в «наггет» не пойдет, но в нем все сетевые вызовы синхронны.
+2
Ну что касается асинхронности, то да, ее нет. И можно ее реализовать кстати тоже с помощью RestSharp. Ну а отсутствие абстрагирования никак не повлияет на работу :)
0
Залил новую версию с асинхронными вызовами :) https://www.nuget.org/packages/YandexLinguistics.NET/2.0.0
0
Также(да, мне нечем заняться с утра :)), не контролируется длина полей ввода. Если вводить в них достаточно длинные строки, то выводятся ошибки.
Например, вот тут:
Метод Deserialize может вернуть null(при длинной введенной строке), и в строке результата вижу:
Например, вот тут:
var error = deserializer.Deserialize<YandexError>(response);
throw new YandexLinguisticsException(error);
Метод Deserialize может вернуть null(при длинной введенной строке), и в строке результата вижу:
System.NullReferenceException: Object reference not set to an instance of an object.
at YandexLinguistics.NET.YandexLinguisticsException..ctor(YandexError error) in c:\Users\юленька\Documents\Code\Yandex-Linguistics.NET\YandexLinguistics.NET\YandexLinguisticsException.cs:line 12
at YandexLinguistics.NET.Dictionary.Lookup(LangPair lang, String text, String ui, LookupOptions flags) in c:\Users\юленька\Documents\Code\Yandex-Linguistics.NET\YandexLinguistics.NET\Dictionary\Dictionary.cs:line 69
at YandexLinguistics.NET.Gui.frmMain.<UpdateDictionaryResult>b__13() in c:\Users\юленька\Documents\Code\Yandex-Linguistics.NET\YandexLinguistics.NET.Gui\frmMain.cs:line 332
+2
Интересно. Может, есть смысл сделать реализацию без RestSharp, но с System.Net.HttpClient и клиентской частью ASP.NET Web API. Тогда не нужно будет сериализовать/десериализовать руками, и асинхронность там тоже есть
+2
В RestSharp тоже есть асинхронность, но я ее не использовал просто. А в текущей реализации разве что-то десериализуется руками? Или что вы имеете ввиду?
Насчет остального я подумаю, а может кто-нибудь другой реализует при острой необходимости :)
Насчет остального я подумаю, а может кто-нибудь другой реализует при острой необходимости :)
0
Евгению конечно виднее, что он имел ввиду.
Просто в web.api эта асинхронность очень просто взять и использовать.
www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client
а конструкция типа
выглядет по страшнее чем
Просто в web.api эта асинхронность очень просто взять и использовать.
www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client
а конструкция типа
RestResponse response = (RestResponse)_client.Execute(request);
XmlAttributeDeserializer deserializer = new XmlAttributeDeserializer();
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
var strs = deserializer.Deserialize<List<string>>(response);
var allLangs = (Lang[])Enum.GetValues(typeof(Lang));
выглядет по страшнее чем
HttpResponseMessage response = client.GetAsync("api/products").Result; // Blocking call!
if (response.IsSuccessStatusCode)
{
// Parse the response body. Blocking!
var products = response.Content.ReadAsAsync<IEnumerable<Product>>().Result;
+1
Планируете ли в API вывести функционал склонения, ранее был XML сервис по склонению собственных имен?
0
Sign up to leave a comment.
API Яндекс Лингвистики под .NET