timo-71

Рейтинг
63
Регистрация
19.09.2018
JonnyB :
Ожидание: сэмулирует нажатие кнопки вверх, выведя последнюю исполненную команду
$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 found
fwrite($stream, "\033\x5b\x41\x36\x0D");# 0126 -bash: 0126: command not found
#012 стрелка вверх,\x36 - 6 в итоге 0126


оно?

Алеандр #:
"wanna on bitch" и "wanna on beatch",

Метод основанный на морфологии - все нормально. Что не удивительно 

bitch_on_wanna
{'cnt': 2, 'keys': [('wanna on bitch', 2, 5)]}
beatch_on_wanna
{'cnt': 2, 'keys': [('wanna on beatch', 2, 5)]}
Алеандр #:
"смотреть в окно" и "смотреть в окна" и получаем разную выдачу, хотя лемма одинакова, да и разница всего в эту самую 1 букву, даже откидывать ничего не нужно.

Просто посложней анализ, но есть методы.

  • Ключи
  • Яндекс XML (можно остановиться тут, посмотрев на разницу выдачи)
  • контент сниппетов + контент х документов из выдачи
  • слова, би(три)граммы задающие скрытые тематики  gensim.models.lsimodel
  • сравнение, анализ
  • профит
По мотивам этого
webinfo1 #:
stupid face wallpaper
или
abrakadabra
Ну да, тихонько подходим к тому, что на 1000 для каждого надо сделать 999 проверок и в результате
Interactive shell

php > $sim = levenshtein('wallpaper stupid face', 'stupid faces wallpaper');
php > print $sim;
20
php > $sim = levenshtein('face wallpaper stupid', 'stupid faces wallpaper');
php > print $sim;
15
php > $sim = levenshtein('stop id face wallpaper', 'stupid face wallpaper');
php > print $sim;
2
php > $sim = levenshtein('stupid face wallpaper', 'stupid faces wallpaper');
php > print $sim;
1

И ничего практически не получить. Вместо  abrakadabra ведь может быть  все что угодно

И это предлагается вместо простого, проверенного решения - лемма/стем, сортировка. Дающего, еще и кучу ништяков. 

Для пыха варианты  в 15-20 строк : стемер(отдельно строки считаются),  выполнить внешнюю программу mystem там или еще чего. Внешние сервисы лемматизации.

webinfo1 #:
Просто надо ещё раз прочитать стартпост

Если настаиваите на буквальном понимании ТС,

iccup :
Как удалить строки различающиеся по одному символу?
iccup #:

да ключи перебираю, встречаются такие строки, например -

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)]}

iccup #:

stupid face wallpaper

stupid faces wallpaper

Алеандр #:
то только сложный алгоритм

Подумаешь, бином Ньютона. Питон. На пыхе, сложнее, только потому, что морф. анализаторов годных не видно. Этот 9 лет назад обновлялся.

(pyenv) [www@localhost ~]$ python
Python 3.9.0 (default, Nov 14 2020, 12:28:09)
[GCC 8.3.1 20191121 (Red Hat 8.3.1-5)] on linux
Type "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']}

Слова в нормальную форму, фразу сортируем и ид для ключа готов.

Aisamiery #:
а не на фронте =))

А на клиенте тоже можно ответ поменять?

С фронта, только координаты. И то осторожно, токен не резиновый..

Aisamiery #:
1. Определение города (например dadata, обязательно с кешем по IP)

Кеш в 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 - хороший бот

Aisamiery #:
Пишем текста (на любой cms) вставляя в них какие-нибудь маркеры, например #город# или #городе#

Если easy, то да.  А катит в ПС?

По технике.

У меня, в итоге, вот это первая:

if (!GEO_LOC) {
     fetch('https://ipinfo.io?token=

Дальше нужны только координаты, все остальное тут

Ну, например, 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"}
}
Которое позволяет сделать почти все что угодно
SergejF #:
падение их ценных бумаг обычно не безразлично

И? Там тренды смотрят.В целом, бывало и газпром брал по, дай бог память, 160, а продавал по 140😣 Но, опыт.

А сейчас, когда триллионы бегут в акции и битки, вместо реального сектора. Самое время - было вчера, но и сегодня можно судя по новостям.

Где то слышал,  что средний чек на покупку битка, после прямых выплат 1200, составил ровно тысяча двести. Вероятно, сейчас стане 1400

Всего: 541