Как установить, что одна переменная больше, чем другая в Python?

Обычно предварительно обученные слова-слова приходят в формате, который gensim можно было бы прочитать естественным образом, например, с помощью метода load_word2vec_format(). Странно, что у вас есть только векторы в вашем собственном формате.

Итак, я бы порекомендовал записать ваши векторы в текстовый формат, совместимый с другими библиотеками word2vec. Вы можете просмотреть метод save_word2vec_format() gensim по адресу:

https: / /github.com/RaRe-Technologies/gensim/blob/9819ce828b9ed7952f5d96cbb12fd06bbf5de3a3/gensim/models/utils_any2vec.py#L131

Вы также можете обучить любую игрушку / куклу любому Word2Vec сохраните его векторы в текстовом формате (w2v_model.wv.save_word2vec_format(filename, binary=False)) и просмотрите полученный файл.

Используя приведенный выше исходный код или файл примера, напишите свой словарь в аналогичном формате. Затем используйте gensim KeyedVectors.load_word2vec_format(filename), чтобы прочитать ваши векторы.

2
задан 19.01.2019, 03:25

4 ответа

Вы можете переопределить поведение оператора >, определив метод __gt__ для объекта. См. документацию по модели данных Python для получения дополнительной информации.

0
ответ дан 07.04.2019, 15:54
  • 1
    Благодарен за то, что @skjagini указывает на него. Я обновил свой ответ соответственно. – MetallicPriest 29.01.2019, 23:49

Для простого решения, которое не требует переопределения операторов:

Сначала определите правила игры:

rules = ['paper>rock', 'rock>scissors', 'scissors>paper']

и используйте функцию, подобную этой, чтобы сравнить данные с правила:

def greater(opt1, opt2):
    if opt1 == opt2:
        return None # draw
    return "{0}>{1}".format(opt1, opt2) in rules

>>> greater('paper','rock')
True
>>> greater('paper','scissors')
False
>>> greater('rock','paper')
False
0
ответ дан 07.04.2019, 15:54
  • 1
    я обновил код и результат в моем вопросе. теперь проблемой является ответ, был успех и я havn' t получил любое уведомление. можно ли подтвердить меня, если уведомление о нажатии работает только на iOS. потому что вихрь упомянул в его GitHub readme что активные уведомления о нажатии только для iOS. – vikas acharya 26.01.2019, 20:05

Это на самом деле интересный вопрос, потому что он поднимает некоторые полезные идеи.

Если бы, например, ножницы из бумаги следовали законам математического неравенства , это была бы тривиальная проблема. Скажем, paper > rock > scissors является математически истинно (то есть paper > scissors, вопреки правилам игры):

class fist(object):

   def __init__(self, weapon):
       WEAPON_VALUES = {'paper': 2, 'rock': 1, 'scissors': 0}
       self.weapon_value = WEAPON_VALUES[weapon]

   def __gt__(self, other):
       return self.weapon_value > other.weapon_value

   def __lt__(self, other):
       return self.weapon_value < other.weapon_value

   def __eq__(self, other):
       return self.weapon_value == other.weapon_value

   def __ne__(self, other):
       return self.weapon_value != other.weapon_value    

paper = fist('paper')

rock = fist('rock')

scissors = fist('scissors')

Теперь мы можем проверить:

In [7]: paper > rock
Out[7]: True

In [8]: rock == rock
Out[8]: True

In [9]: paper < scissors
Out[9]: False

In [10]: scissors < rock
Out[10]: True
[ 1114] К сожалению, бумага-ножницы-камень имеет круговую логику, и поэтому обычное понятие неравенства в этом случае не работает (следовательно, paper < scissors оценивается как False).

Вы можете использовать пользовательские сопоставимые , как объяснено в другом ответе , но имейте в виду, что это вызывает парадоксы, такие как rock > scissors > paper == True, когда, конечно, rock < paper.

0
ответ дан 07.04.2019, 15:54
  • 1
    Я don' t знают, почему это получает upvotes, это doesn' t решают проблему, как дано Вашим собственным тестовым сценарием: paper < scissors == False. – Mark Ransom 19.01.2019, 04:13
  • 2
    @MarkRansom Да, я объяснил в ответе, что это для примера где бумага > скала > ножницы математически верны (т.е. бумага > ножницы). И затем объяснил почему этот подход wouldn' t быть рекомендованным для фактических правил бумажных горных ножниц (парадоксы неравенства). Но возможно it' s не достаточно ясный - у Вас есть предложение для того, как я мог передать это более ясно? – ajrwhite 19.01.2019, 04:25
  • 3
    Парадокс существует для любой допустимое решение, я думал, что это было большой частью Вашего ответа. Проблема, которую я имею, состоит в том, что это приводит к сбою для некоторых тестов тот shouldn' t быть парадоксами. Т.Е. Вы didn' t отвечают на фактический вопрос. – Mark Ransom 19.01.2019, 04:40
  • 4
    Несомненно, я хотел пробежать, почему никаким решением не была разумная идея, потому что Вы повреждаете понятие неравенства, как это правильно понято. Я теперь связался с правильным решением, таким образом, надо надеяться, это служит полезным дополнением к принятому ответу. Я действительно понимаю Ваши проблемы, все же. (Мой неявный ответ на фактический вопрос: " don' t делают this".) – ajrwhite 23.01.2019, 00:17
  • 5
    Какой язык - это? It' s не Perl, ни awk... – choroba 26.01.2019, 00:09

Да, как сказал Даниил, с помощью переопределения __cmp__ вы можете получить это:

class Comparable(object):
    def __init__(self, below_class, above_class):
        self.above_class = above_class
        self.below_class = below_class

    def __cmp__(self, other):
        if isinstance(other, self.below_class):
            return 1
        if isinstance(other, self.above_class):
            return -1
        return 0

class Paper(Comparable):
    pass

class Rock(Comparable):
    pass

class Scissors(Comparable):
    pass

scissors = Scissors(Paper, Rock)
paper = Paper(Rock, Scissors)
rock = Rock(Scissors, Paper)

# True

print paper > rock
print scissors > paper
print rock > scissors

# False

print paper < rock
print scissors < paper
print rock < scissors

Документация о том, как это работает, доступна здесь: https: //docs.python .org / 2.6 / ссылка / datamodel.html # объекта. CMP

0
ответ дан 07.04.2019, 15:54
  • 1
    Вы могли объяснить это class Paper(Comparable): pass class Rock(Comparable): pass class Scissors(Comparable): pass – ikuro 19.01.2019, 09:55
  • 2
    @ikuro те просто генерируют 3 подкласса Comparable, которые являются not' t действительно отличающийся от Comparable кроме у них есть различные типы. Поскольку у них есть различные типы, можно сравнить типы, как сделано в __cmp__. – Mark Ransom 19.01.2019, 12:17
  • 3
    Взгляды много как C#. – Hambone 26.01.2019, 03:07

Теги

Похожие вопросы