def _create_optimized_description(original_description: str,
                                  fields: Dict[str, Any]) -> str:
  """Appends the fields to the description.

  Args:
    original_description: The original product description.
    fields: the fields to be appended.

  Returns:
    The original description with as many fields as possible appended.
  """
  if not fields:
    return original_description

  fields_to_append_to_description = []
  for _, mined_attribute_values in fields.items():
    if isinstance(mined_attribute_values, str):
      fields_to_append_to_description.append(mined_attribute_values)
    elif isinstance(mined_attribute_values, list):
      fields_to_append_to_description.extend(mined_attribute_values)

  field_with_keywords_appended = optimization_util.append_keywords_to_field(
      original_description, fields_to_append_to_description,
      len(original_description), _MAX_DESCRIPTION_LENGTH,
      constants.ALL_ALPHABETIC_CLOTHING_SIZES)

  return field_with_keywords_appended
示例#2
0
    def test_append_keywords_to_field_not_append_when_keywords_empty(self):
        target_field = 'dummy field'

        actual_output = optimization_util.append_keywords_to_field(
            target_field, [], 0, len(target_field))

        self.assertEqual(target_field, actual_output)
示例#3
0
    def test_append_keywords_to_field_appends_when_keyword_is_in_allowlist_and_is_in_the_field(
            self):
        target_field = 'dummy field'

        actual_output = optimization_util.append_keywords_to_field(
            target_field, ['M'], 0, 100, allowlist=['M'])

        self.assertEqual('dummy field… M', actual_output)
示例#4
0
    def test_append_keywords_to_field_not_append_when_keywords_already_there(
            self, keywords, expected_output):
        target_field = 'dummy field'

        actual_output = optimization_util.append_keywords_to_field(
            target_field, keywords, 0, len(target_field))

        self.assertEqual(expected_output, actual_output)
示例#5
0
    def test_append_keywords_to_field_append_keywords_after_removing_last_characters_when_length_exceeds_max(
            self, keywords, expected_output):
        target_field = 'dummy field'

        actual_output = optimization_util.append_keywords_to_field(
            target_field, keywords, 0, len(target_field))

        self.assertEqual(expected_output, actual_output)
示例#6
0
    def test_append_keywords_to_field_append_keywords_when_length_under_max(
            self, keywords, expected_output):
        target_field = 'dummy field'

        actual_output = optimization_util.append_keywords_to_field(
            target_field, keywords, 0, 100)

        self.assertEqual(expected_output, actual_output)
示例#7
0
    def test_append_keywords_to_field_does_not_append_when_no_space_to_append(
            self):
        original_field = 'dummy field'
        keywords = ['keyword1', 'keyword2']
        chars_to_preserve = len(original_field)

        actual_output = optimization_util.append_keywords_to_field(
            original_field, keywords, chars_to_preserve, len(original_field))

        self.assertEqual(original_field, actual_output)
示例#8
0
    def test_append_keywords_to_field_does_not_truncate_description_if_field_can_fit_in_whitespace(
            self):
        original_field = 'dummy field'
        field_to_append = 'Field to append'
        keywords = [field_to_append]
        max_len = len(original_field) + len('… ') + len(field_to_append)
        expected_field = f'{original_field}… {field_to_append}'

        actual_output = optimization_util.append_keywords_to_field(
            original_field, keywords, 0, max_len)

        self.assertEqual(expected_field, actual_output)
示例#9
0
    def test_append_keywords_to_field_does_not_split_numbers_when_description_truncated_to_fit_attributes(
            self):
        original_title = 'Original title'
        appended_desc = 'Description 1.2g that can be truncated'
        original_field = f'{original_title}{appended_desc}'
        field_to_append = 'Field to append'
        max_len_modifier = 7
        max_len = len(original_title) + (len(appended_desc) - max_len_modifier)
        expected_field = 'Original titleDescription… Field to append'

        actual_output = optimization_util.append_keywords_to_field(
            original_field, [field_to_append], len(original_title), max_len)

        self.assertEqual(expected_field, actual_output)
示例#10
0
    def test_append_keywords_to_field_truncates_description_if_field_cannot_fit_in_whitespace(
            self):
        original_title = 'Original title'
        appended_desc = 'Description that can be truncated'
        original_field = f'{original_title}{appended_desc}'
        field_to_append = 'Field to append'
        max_len_modifier = 5
        max_len = len(original_title) + (len(appended_desc) - max_len_modifier)
        expected_field = 'Original titleDescription… Field to append'

        actual_output = optimization_util.append_keywords_to_field(
            original_field, [field_to_append], len(original_title), max_len)

        self.assertEqual(expected_field, actual_output)
示例#11
0
    def test_append_keywords_to_field_only_appends_fields_that_will_fit(self):
        original_field = 'dummy field'
        field_to_append = 'Field to append'
        field_that_is_too_long_to_append = (
            'Super long field that does not have'
            'space to be appended')
        keywords = [field_that_is_too_long_to_append, field_to_append]
        chars_to_preserve = len(original_field)
        max_len = len(original_field) + 20
        expected_field = f'{original_field}… {field_to_append}'

        actual_output = optimization_util.append_keywords_to_field(
            original_field, keywords, chars_to_preserve, max_len)

        self.assertEqual(expected_field, actual_output)
示例#12
0
def _append_fields_to_title(product: Dict[str, Any], fields: List[str],
                            chars_to_preserve: int) -> None:
  """Appends the fields to the title.

  Args:
    product: Product data.
    fields: the field values to be appended.
    chars_to_preserve: The num of chars to leave unchanged (used to make sure
      the original title is preserved).
  """
  original_title = product.get('title', '')
  product['title'] = optimization_util.append_keywords_to_field(
      original_title, fields, chars_to_preserve, _MAX_TITLE_LENGTH,
      constants.ALL_ALPHABETIC_CLOTHING_SIZES)

  if product['title'] != original_title:
    logging.info('Modified item %s: Appended field values to title: %s',
                 product['offerId'], product['title'])