001.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. # -*- coding: utf-8 -*-
  2. """原始任务行 → [{"brand","product","spec"}, ...]"""
  3. import re
  4. _RAW = """
  5. 天和 骨贴膏通 11
  6. 天和 追风膏 9
  7. 天和 麝香壮骨膏 5
  8. 999 益血生胶囊 1
  9. 999 护肝片 1
  10. 999 消痔软膏 2
  11. 999 玻璃酸钠滴眼液 1
  12. 999 尪痹胶囊 1
  13. 999 益气清肺颗粒 1
  14. 999 气滞胃痛片 1
  15. 999 温经汤颗粒 1
  16. 999 气滞胃痛颗粒
  17. 好娃娃 小儿氨酚烷胺颗粒 2
  18. 澳诺 葡萄糖酸钙锌口服溶液 12
  19. 易善复 多烯磷脂酰胆碱胶囊 36 5
  20. 澳诺 维生素D滴剂 3
  21. 999 硝呋太尔制霉素阴道软胶囊 6粒 3
  22. 达因 维生素D滴剂 7
  23. 天和 骨贴膏通 15
  24. 天和 追风膏 25
  25. 天和 麝香壮骨膏 25
  26. 999 益血生胶囊
  27. 999 护肝片 3
  28. 999 玻璃酸钠滴眼液 1
  29. 999 尪痹胶囊 4
  30. 999 消痔软膏 4
  31. 999 益气清肺颗粒 1
  32. 999 气滞胃痛片
  33. 999 温经汤颗粒 3
  34. 999 气滞胃痛颗粒 20
  35. 好娃娃 小儿氨酚烷胺颗粒 7
  36. 澳诺 葡萄糖酸钙锌口服溶液 31
  37. 易善复 多烯磷脂酰胆碱胶囊 36 6
  38. 澳诺 维生素D滴剂 2
  39. 999 硝呋太尔制霉素阴道软胶囊 6粒 4
  40. 达因 维生素D滴剂 17
  41. 天和 骨贴膏通
  42. 天和 追风膏
  43. 天和
  44. 999 益血生胶囊
  45. 999 玻璃酸钠滴眼液 应取消
  46. 999 尪痹胶囊
  47. 999 益气清肺颗粒 应取消
  48. 999 气滞胃痛片 无
  49. 999 温经汤颗粒 应取消
  50. 999 气滞胃痛颗粒
  51. 好娃娃 小儿氨酚烷胺颗粒
  52. 澳诺 澳诺葡萄糖酸钙锌口服溶液
  53. 易善复 多烯磷脂酰胆碱胶囊
  54. 澳诺 澳诺维生素D滴剂 应取消
  55. 达因 伊可新维生素AD滴剂
  56. 水青 水青硝呋太尔制霉素阴道软胶囊 做企业判断
  57. 999 消痔软膏 1
  58. 999 护肝片 应取消
  59. """
  60. _NOTE_ENDINGS = frozenset({"应取消", "无", "做企业判断"})
  61. _SPEC_LAST = re.compile(r"^(\d+粒|\d+支|\d+片|\d+g|\d+G|\d+ml|\d+ML|\d+)$")
  62. def _parse_line(line):
  63. line = line.strip()
  64. if not line:
  65. return None
  66. parts = line.split()
  67. brand = parts[0]
  68. tail = parts[1:]
  69. if not tail:
  70. return {"brand": brand, "product": "", "spec": ""}
  71. while tail and tail[-1].isdigit():
  72. tail = tail[:-1]
  73. if not tail:
  74. return {"brand": brand, "product": "", "spec": ""}
  75. note = ""
  76. if tail[-1] in _NOTE_ENDINGS:
  77. note = tail[-1]
  78. tail = tail[:-1]
  79. if not tail:
  80. return {"brand": brand, "product": "", "spec": note}
  81. spec_bits = []
  82. if note:
  83. spec_bits.append(note)
  84. prod = tail[:]
  85. if len(prod) >= 2 and _SPEC_LAST.match(prod[-1]):
  86. spec_bits.insert(0, prod[-1])
  87. prod = prod[:-1]
  88. product = " ".join(prod)
  89. spec = " ".join(spec_bits) if spec_bits else ""
  90. return {"brand": brand, "product": product, "spec": spec}
  91. def _build_items(raw_text):
  92. out = []
  93. for line in raw_text.splitlines():
  94. row = _parse_line(line)
  95. if row:
  96. out.append(row)
  97. return out
  98. ITEMS = _build_items(_RAW)
  99. if __name__ == "__main__":
  100. import json
  101. print(json.dumps(ITEMS, ensure_ascii=False, indent=2))