$stream = ssh2_shell($connection, 'xterm', null, 80, 24, SSH2_TERM_UNIT_CHARS);fwrite($stream, "\x0D"); fwrite($stream, "\x30\x31\x32\n"); # 012 -bash: 012: command not foundfwrite($stream, "\033\x5b\x41\x36\x0D");# 0126 -bash: 0126: command not found#012 стрелка вверх,\x36 - 6 в итоге 0126
оно?
Метод основанный на морфологии - все нормально. Что не удивительно
bitch_on_wanna{'cnt': 2, 'keys': [('wanna on bitch', 2, 5)]}beatch_on_wanna{'cnt': 2, 'keys': [('wanna on beatch', 2, 5)]}
Просто посложней анализ, но есть методы.
Interactive shellphp > $sim = levenshtein('wallpaper stupid face', 'stupid faces wallpaper');php > print $sim;20php > $sim = levenshtein('face wallpaper stupid', 'stupid faces wallpaper');php > print $sim;15php > $sim = levenshtein('stop id face wallpaper', 'stupid face wallpaper');php > print $sim;2php > $sim = levenshtein('stupid face wallpaper', 'stupid faces wallpaper');php > print $sim;1
И ничего практически не получить. Вместо abrakadabra ведь может быть все что угодно
И это предлагается вместо простого, проверенного решения - лемма/стем, сортировка. Дающего, еще и кучу ништяков.
Для пыха варианты в 15-20 строк : стемер(отдельно строки считаются), выполнить внешнюю программу mystem там или еще чего. Внешние сервисы лемматизации.
Если настаиваите на буквальном понимании ТС,
да ключи перебираю, встречаются такие строки, например -
stupid face wallpaper
stupid faces wallpaper
То просто взять то, что короче🤣 И, опять Левенштейн с носом.
Пример не решает типовую задачу для ключей. Их обычно 100500. Да и простая перестановка слов загонит в тупик.
php > $sim = similar_text('stupid face wallpaper', 'stupid faces wallpaper', $perc); php > print $perc; 97.674418604651 php > $sim = similar_text('wallpaper stupid face', 'stupid faces wallpaper', $perc); php > print $perc; 51.162790697674
Про Левенштейна просто промолчу.
Ну вот для примера 1000 отсортировать по "!Частотность !Весь !мир"
engine_wallpaper{'cnt': 34949, 'keys': [('wallpaper engine', 34949)]}wallpaper{'cnt': 12655, 'keys': [('wallpaper', 12655)]}4k_wallpaper{'cnt': 3288, 'keys': [('4k wallpaper', 1644), ('wallpaper 4k', 1644)]}anime_wallpaper{'cnt': 2510, 'keys': [('anime wallpaper', 1255), ('wallpaper anime', 1255)]}aesthetic_wallpaper{'cnt': 2496, 'keys': [('aesthetic wallpaper', 1243), ('wallpaper aesthetic', 1243), ('aesthetics wallpaper', 10)]}wallpaper_скачать{'cnt': 1717, 'keys': [('скачать wallpaper', 844), ('wallpaper скачать', 873)]}hd_wallpaper{'cnt': 1522, 'keys': [('hd wallpaper', 761), ('wallpaper hd', 761)]}live_wallpaper{'cnt': 1174, 'keys': [('wallpaper live', 587), ('live wallpaper', 587)]}wallpaper_обои{'cnt': 1119, 'keys': [('wallpaper обои', 557), ('обои wallpaper', 562)]}
Подумаешь, бином Ньютона. Питон. На пыхе, сложнее, только потому, что морф. анализаторов годных не видно. Этот 9 лет назад обновлялся.
(pyenv) [www@localhost ~]$ pythonPython 3.9.0 (default, Nov 14 2020, 12:28:09) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)] on linuxType "help", "copyright", "credits" or "license" for more information.>>> >>> import spacy>>> nlp = spacy.load("en_core_web_sm")>>> def en_lemm(doc):... res = []... for token in doc:... res.append(token.lemma_)... return '_'.join(sorted(res))... >>> st = (... 'stupid face wallpaper',... 'stupid faces wallpaper'... )>>> >>> res = {}>>> print(st)('stupid face wallpaper', 'stupid faces wallpaper')>>> for s in st:... did = en_lemm(nlp(s))... if did not in res:... res[did] = [s]... else:... res[did].append( s )... >>> print(res){'face_stupid_wallpaper': ['stupid face wallpaper', 'stupid faces wallpaper']}
Слова в нормальную форму, фразу сортируем и ид для ключа готов.
А на клиенте тоже можно ответ поменять?
С фронта, только координаты. И то осторожно, токен не резиновый..
Кеш в ls.setItem('geo', GEO_LOC), фетч только в зависимости
window.addEventListener('mousemove', activate);window.addEventListener('keypress', activate);window.addEventListener('click', activate);
if (!GEO_LOC) { fetch('https://ipinfo.io?token=
Кстати, в плане activate на клиенте большие надежны в плане request['is_bot'] в диапазоне 0 - 1. И, если
if ('loc' in data) {
то 0.2-0.3 за то что он более менее реальный.
==========
пока: False не бот, -1 левый бот, "юзер агент" : str - хороший бот
Если easy, то да. А катит в ПС?
По технике.
У меня, в итоге, вот это первая:
Дальше нужны только координаты, все остальное тут
Ну, например, 51.367725, 42.074977,(Борисоглебск)
Рядом могут быть Тамбов, Воронеж, Липецк, Саратов, Пенза (точки продаж, где есть контакты 'visible': 1)
GEO query for coord [51.367725, 42.074977]{'region': ['Тамбовская область', '52.680864,41.587183'], 'location': {'type': 'Point', 'coordinates': [41.452274, 52.721219]}, 'name': 'Тамбов'} {'region': ['Воронежская область', '50.970898,40.233395'], 'location': {'type': 'Point', 'coordinates': [39.200287, 51.661535]}, 'name': 'Воронеж'} {'region': ['Липецкая область', '52.644554,39.149784'], 'location': {'type': 'Point', 'coordinates': [39.599346, 52.608782]}, 'name': 'Липецк'} {'region': ['Саратовская область', '51.578529,46.797223'], 'location': {'type': 'Point', 'coordinates': [46.034158, 51.533103]}, 'name': 'Саратов'} {'region': ['Пензенская область', '53.1824,44.634151'], 'location': {'type': 'Point', 'coordinates': [45.018316, 53.195063]}, 'name': 'Пенза'}
А могут Борисоглебск (он и есть, но 'visible': 0), Балашов, Тамбов, Михайловка, Лиски:
GEO query for coord [51.367725, 42.074977]{'region': ['Воронежская область', '50.970898,40.233395'], 'location': {'type': 'Point', 'coordinates': [42.074977, 51.367725]}, 'name': 'Борисоглебск'} {'region': ['Саратовская область', '51.578529,46.797223'], 'location': {'type': 'Point', 'coordinates': [43.146469, 51.554601]}, 'name': 'Балашов'} {'region': ['Тамбовская область', '52.680864,41.587183'], 'location': {'type': 'Point', 'coordinates': [41.452274, 52.721219]}, 'name': 'Тамбов'} {'region': ['Волгоградская область', '49.615821,44.151406'], 'location': {'type': 'Point', 'coordinates': [43.240083, 50.070928]}, 'name': 'Михайловка'} {'region': ['Воронежская область', '50.970898,40.233395'], 'location': {'type': 'Point', 'coordinates': [39.497764, 50.986969]}, 'name': 'Лиски'}
А всего, то в первом случае
query = { 'visible':1, 'location': { '$near': SON([
Подгон, для php-шников (sqlite), кто понимает:
function geoByDist( array $coord, bool $yaFlag=false, int $lim=100, ?callable $cb=null ){ $filter = [ ':COSLAT' => cos($coord[0] * pi() / 180), ':SINLAT' => sin($coord[0] * pi() / 180), ':COSLNG' => cos($coord[1] * pi() / 180), ':SINLNG' => sin($coord[1] * pi() / 180), ]; $yacity = $yaFlag ? ' WHERE "issub"=1 ':''; $sql = sprintf('SELECT rowid as _id, cityid, region, city, coord, yacity, yaregion, sub, ABS ( (:SINLAT * sin_lat + :COSLAT * cos_lat ) * (cos_lng * :COSLNG + sin_lng * :SINLNG) ) as dist FROM "cityes" %s ORDER BY dist DESC LIMIT %d', $yacity, $lim); return \Fwe\App\Core::dbsq('geo.db', _DBSqlite)->q($sql, $filter, '_id', $cb); }
Древняя, работала, не подводила.
Для ВП не знаю. Как вариант. Имеем, что то типа:
{ "_id":"NizhniyNovgorod", "regId":"66297070a982d00c", "region":["Нижегородская область","56.312764,44.611891"], "cid":"nizhnii-novgorod", "visible":1, "location":{"type":"Point","coordinates":[44.005986,56.326887]}, "name":"Нижний Новгород", "morph":["Нижний Новгород","Нижнего Новгорода","Нижнему Новгороду","Нижний Новгород","Нижним Новгородом","Нижнем Новгороде"], "delivery":{"company":"Деловые Линии","adres":"Московское ш., 52"}}
И? Там тренды смотрят.В целом, бывало и газпром брал по, дай бог память, 160, а продавал по 140😣 Но, опыт.
А сейчас, когда триллионы бегут в акции и битки, вместо реального сектора. Самое время - было вчера, но и сегодня можно судя по новостям.
Где то слышал, что средний чек на покупку битка, после прямых выплат 1200, составил ровно тысяча двести. Вероятно, сейчас стане 1400